powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / deploy веб-сервисов и теория по initialContext.lookup() - вопрос
22 сообщений из 22, страница 1 из 1
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33034837
Фотография Sehensucht! (потерял пароль)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал веб-сервис на яве. БД - Оракл. Сервер приложений - Oracle App Server 10g. Разворачиваю веб-сервис из EAR-файла при помощи Oracle Enterprise Manager (веб-интерфейс управления сервером). Так вот - не могу подсоединиться к БД, получаю ошибку java.lang.NullPointerException

Не могу разобраться с data-sources.xml :( Сам веб-сервис разворачивается нормально и успешно запускается, но когда доходит до обращения к БД - вываливается с ошибкой :(

Итак, вот что прописано в классе подключения к БД (нумерация строк в коде отсутствует, естественно):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 1 .     try  {
 2 .      DataSource ds = (DataSource)_initialContext.lookup("jdbc/wwwbaseCoreDS");
 3 .      //DataSource ds = (DataSource)_initialContext.lookup("java:comp/env/jdbc/wwwbaseCoreDS");
 4 .      conn = ds.getConnection();
 5 .    }  catch  (NamingException ne) {
 6 .      ne.printStackTrace( new  PrintStream(System.err));      
 7 .    }    

вот что прописано в data-sources.xml, подключенном к проекту:
Код: plaintext
1.
2.
3.
<data-source name="wwwbase"  class ="com.evermind.sql.DriverManagerDataSource" location="jdbc/wwwbaseCoreDS"
xa-location="jdbc/xa/wwwbaseXADS" ejb-location="jdbc/wwwbaseDS" pooled-location="jdbc/wwwbasePooledDS"
connection-driver="oracle.jdbc.driver.OracleDriver" username="username" password="password"
url="jdbc:oracle:thin:@ip:port:sid" inactivity-timeout="30"/>

Настройки подключения к БД я делаю ручками в Oracle Enterprise Manager (data-sources.xml почему-то автоматом не подцепляется, хотя в проекте он указан и все прекрасно работает на локальной машине на JDeveloper-e)

Мне непонятно следующее - чем отличаются строки 2 и 3 и что это за пути прописываются такие - "jdbc/" и "java:comp/env/jdbc/" Доку по классу InitialContext читал, но толком не понял ответ на свой вопрос. Где можно почитать подробнее?
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33035012
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sehensucht! (потерял пароль)Настройки подключения к БД я делаю ручками в Oracle Enterprise Manager (data-sources.xml почему-то автоматом не подцепляется, хотя в проекте он указан и все прекрасно работает на локальной машине на JDeveloper-e)Контейнер перезапустил?
Ты уверен, что initialcontext получил?

Sehensucht! (потерял пароль)Мне непонятно следующее - чем отличаются строки 2 и 3 и что это за пути прописываются такие - "jdbc/" и "java:comp/env/jdbc/"Это разные пути поиска в JNDI источника данных.
Первый вариант, грубо говоря, мы ищем источник по "прямому" имени в конейнере.
Второй вариант, это когда мы выполняем поиск, начиная от специального контекста java:comp/env/. Т.е. в данном случае получается, что дерево JNDI начиается на клиенте, и можно через дескриптор application-client.xml прописать отображение имен в JNDI на объекты в контейнере.

Словами это сложно объяснить, надо рисовать.

Загляни в спецификацию 2.0 по EJB, там были фразы и картинки на тему java:comp/env/. Что EJB, не обращай внимания - это без разницы, что искать в JNDI: объект источника данных или внутренний интерфейс компонента.
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33035208
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот рабочий пример (кажется ничего не забыл):
META-INF/data-sources.xml внутри EAR
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE data-sources  PUBLIC  "Orion data-sources" "http://xmlns.oracle.com/ias/dtds/data-sources.dtd">
<data-sources>
    <data-source
         class ="com.evermind.sql.DriverManagerDataSource"
        name="OracleData"
        location="jdbc/OracleCoreDS"
        xa-location="jdbc/xa/OracleXADS"
        ejb-location="jdbc/OracleData" // здесь
        connection-driver="oracle.jdbc.driver.OracleDriver"
        username="wowa" password="wowa"
        url="jdbc:oracle:thin:@otch:1521:express"
        inactivity-timeout="40"
        schema="database-schemas/oracle.xml"/>
</data-sources>
кусок описания EJB из ejb-jar.xml
Код: plaintext
1.
2.
3.
4.
5.
         <resource-ref >
            <res-ref-name>jdbc/Oracle</res-ref-name> // здесь
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Application</res-auth>
         </resource-ref>
кусок описания EJB из orion-ejb-jar.xml
Код: plaintext
1.
2.
        <resource-ref-mapping name="jdbc/Oracle"  // здесь
          location="jdbc/OracleData"/> 
кусок кода EJB
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
...
     public   void  ejbCreate() {
         try  {
            InitialContext ic   =  new  InitialContext();
            ds = (DataSource)ic.lookup("java:comp/env/jdbc/Oracle"); // и конешна здесь
        }  catch  (NamingException e) {
            e.printStackTrace();
        }
    }
...
и всё пучком

ЗЫ
Изучайте матчасть и всё у вас получится, удачи.
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33035331
Фотография Sehensucht! (потерял пароль)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а обязательно писать "java:comp/env/jdbc/Oracle", можно просто "jdbc/Oracle"?

у меня нет доступа к исходникам конфигов, есть только JDeveloper (там могу data-sources.xml редактировать) и Oracle Enterprise Manager (там тоже настройки прописываются). все вроде правильно делаю, а вот цветочек не выходит каменный :(
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33035359
Фотография Sehensucht! (потерял пароль)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stdioКонтейнер перезапустил?
точно, да.

stdioТы уверен, что initialcontext получил?
нет, не уверен. я слабо представляю, как вывести подробный отчет об ошибках, потому как результатом работы веб-сервиса является XML, и сообщение об ошибке выглядит так:
Код: plaintext
1.
2.
3.
  <faultcode>SOAP-ENV:Server.Exception:</faultcode> 
  <faultstring>java.lang.NullPointerException</faultstring> 
  <faultactor>/avk/Ws</faultactor> 

а вот как я обрабатываю ошибки написано в моем первом посте в строке 6
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33035408
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sehensucht! (потерял пароль)а обязательно писать "java:comp/env/jdbc/Oracle", можно просто "jdbc/Oracle"?
на эту часть вопроса ответил уважаемый stdio
Sehensucht! (потерял пароль)у меня нет доступа к исходникам конфигов
вам стоит прочитать про EJB Roles
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33035416
Фотография Sehensucht! (потерял пароль)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо. ушел читать...
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33035440
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sehensucht! (потерял пароль) stdioКонтейнер перезапустил?
точно, да.

stdioТы уверен, что initialcontext получил?
нет, не уверен. я слабо представляю, как вывести подробный отчет об ошибках, потому как результатом работы веб-сервиса является XML, и сообщение об ошибке выглядит так:
Код: plaintext
1.
2.
3.
  <faultcode>SOAP-ENV:Server.Exception:</faultcode> 
  <faultstring>java.lang.NullPointerException</faultstring> 
  <faultactor>/avk/Ws</faultactor> 

а вот как я обрабатываю ошибки написано в моем первом посте в строке 6У меня есть бАльшое подозрение, что _initialContext имеет значение null.
И почти уверенн, что ты даже не подсоединился к JNDI через RMI.
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33035704
Фотография Sehensucht! (потерял пароль)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stdioУ меня есть бАльшое подозрение, что _initialContext имеет значение null.
И почти уверенн, что ты даже не подсоединился к JNDI через RMI.

так на локальной машине все работает! а при деплое на сервер перестает работать :( я не сильно в веб-сервисах разбираюсь, а уж в администрировании OAS и подавно...

вот и пытаюсь понять, чего именно не хватает моему проекту после деплоя на сервер.
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33035845
Фотография Sehensucht! (потерял пароль)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О!!!
Шаманил-шаманил, передеплоил веб-сервис, теперь при обращении к БД получаю такое сообщение: "недействительные аргументы в вызове". В каком именно не уточняется... хотя может имеет смысл логи сервера посмотреть...
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33035870
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sehensucht! (потерял пароль) stdioУ меня есть бАльшое подозрение, что _initialContext имеет значение null.
И почти уверен, что ты даже не подсоединился к JNDI через RMI.

так на локальной машине все работает!Ну и что. Ты поиск начинаешь выполнять в JNDI контейнеров сервера, а не локальной машины.

Вопрос №1. Равен ли _initialContext null-у при работе приложения на сервере OracleAS? Да?

А веб-сервисы тут вообще не причём
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33036021
Фотография Sehensucht! (потерял пароль)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин! Совсем запутался...
Сделал так
Код: plaintext
conn = DriverManager.getConnection("jdbc:oracle:thin:@ip:port:sid", "user","passwd");
и все заработало (?)
Но знающие люди говорят, что так не совсем правильно писать...
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33036061
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sehensucht! (потерял пароль)Блин! Совсем запутался...
Сделал так
Код: plaintext
conn = DriverManager.getConnection("jdbc:oracle:thin:@ip:port:sid", "user","passwd");
и все заработало (?)
Но знающие люди говорят, что так не совсем правильно писать...
Это явное получение соединения...
Без JNDI.
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33036063
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sehensucht! (потерял пароль)знающие люди говорят
И правильно говорят. Доступ к серверу БД открывать на весь мир вы тоже собираетесь ???
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #33036227
Фотография Sehensucht! (потерял пароль)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на счет открытия БД всему миру - не совсем представляю, как это реализовать... Просто при явном задании соединения в случае изменений адрес БД придется перекомпилировать классы, в то время как при задании адреса через датасорс будет возможность подправить данные в xml-файле без перекомпиляции классов.

доклад окончил.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #37685763
kruglikav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я тоже с JNDI совсем запутался, помогите разобраться плиз. дело в следующем: есть БД, в ней хранимые процедуры(PL/SQL), я в jDeveloper генерирую веб сервис из этой хр процедуры, в визарде выбираю коннекшн к БД (конекш предварительно создан в том же jDevelopere). Затем деплою веб сервис на OAS 10g и тестирую сервис, сервисы выдают ошибку ... вообщем что то про JNDI, как я понимаю сервис пытается найти коннекшн в JNDI сервера приложений, но на сервере я ведь не создавал никакого коннекшена. Правильно ли я понимаю ситуацию? мне нужно создать коннекшн на сервере приложений и задать ему такое же имя в JNDI как и прописанно в сгенеринном сервисе??? просто у меня это как то не укладывается в голове, почему сервисы генерируются таким образом, если они ничего не знают про сервер приложений, почему для коннекта используется JNDI сервера приложений??? или я вообще не в ту степь думаю??
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #37685766
kruglikav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот ошибка
Error doing JNDI lookup on target jdbc
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #37686197
kruglikav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
i need help
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #37687488
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kruglikav,

В чем именно проблема не подскажу, но расскажу про общий смысл использования JNDI. В Enterprise Java определено много ролей:
1. Server Provider
2. Container Provider
3. Component Developer
4. Assembler
5. Deployer
6. Application Server Administrator

Так как Java EE задумывался для создания огромных приложений, то за каждой ролью может стоять не один человек, а целые команды. У роли достаточно четко определены обязанности и даже артефакты которые этой ролью должны создаваться.

Во время разработки приложения (Component Developer) может не знать окружение (environment) в котором приложение будет работать. Разработчик использует виртуальные ресурсы, как бы говоря "Для работы моего приложения нужны такие то: roles, jdbc connections, jms queues" и т.п. У каждого приложения есть его виртуальное JNDI дерево (new InitialContext().lookup("java:comp/env/...")). Собственно в этом виртуальном JNDI дереве разработчик все необходимые ресурсы и берет.

С другой стороны Application Servet Administrator, настраивает окружение сервера. И здесь он уже реально определяет: группы пользователей, соединения с БД и все остальное.

Ну и третья роль это Deployer. Это тот кто во время развертывания приложения производит мапинг виртуальных ресурсов (которые нужны разработчику) на реальные ресурсы (определенные администратором сервера). Обычно это делается в специфических дескрипторах развертывания (sun-web.xml, sun-ejb-jar.xml).
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #37687641
kruglikav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0 , спасибо за ваш ответ, хочу еще кое что уточнить
авторНу и третья роль это Deployer. Это тот кто во время развертывания приложения производит мапинг виртуальных ресурсов (которые нужны разработчику) на реальные ресурсы (определенные администратором сервера). Обычно это делается в специфических дескрипторах развертывания (sun-web.xml, sun-ejb-jar.xml).

вот эта третья роль, это человек делает или это при деплое приложения на сервер должны автоматически создаваться все неоходимые ресурсы , которые прописаны в этих спец дескрипторах?
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #37688140
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kruglikavvas0 , спасибо за ваш ответ, хочу еще кое что уточнить
авторНу и третья роль это Deployer. Это тот кто во время развертывания приложения производит мапинг виртуальных ресурсов (которые нужны разработчику) на реальные ресурсы (определенные администратором сервера). Обычно это делается в специфических дескрипторах развертывания (sun-web.xml, sun-ejb-jar.xml).

вот эта третья роль, это человек делает или это при деплое приложения на сервер должны автоматически создаваться все неоходимые ресурсы , которые прописаны в этих спец дескрипторах? За создание ресурсов отвечает администратор сервера приложений. Именно он настраивает все jdbc datasource, securiry realm и все остальное.

Последовательность примерно такая (например нужно соединение с БД).

1. Разработчик ведет поиск в виртуальном JNDI дереве
Код: java
1.
DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/localDS");

2. В web.xml виртуальное JNDI дерево описывается.
Код: java
1.
2.
3.
4.
    <resource-ref>
        <res-ref-name>jdbc/localDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
    </resource-ref>


3. Администратор сервера для доступа к БД настраивает DataSource. Обычно это делается через административную консоль сервера приложений.
4. Deployer во время развертывая приложения, все виртуальные ресурсы, должен замапить на реальные sun-web.xml.
Код: java
1.
2.
3.
4.
   <resource-ref>
        <res-ref-name>jdbc/localDS</res-ref-name>
        <jndi-name>jdbc/globalDS</jndi-name>
    </resource-ref>


Все эти мапинги\перемапинги добавляют дополнительную сложность для маленьких проектов. Но представь, если у тебя десяток проектов и сотни человек. Фактически какие задачи решаются:
- Администратор занимается управлением ресурсов централизованно. Грубо говоря настроил один раз соединение с БД и все пользуются, а не каждое приложение как-нибудь по своему.
- Разработчик не обязан знать окружение в котором приложение будет работать. Грубо говоря разработчик говорит - "Мне нужны, такие то ресурсы", но вопрос откуда все эти ресурсы возьмутся откладывается на потом.
...
Рейтинг: 0 / 0
deploy веб-сервисов и теория по initialContext.lookup() - вопрос
    #37688181
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0,
интересный пост.
Действительно, продуктивность и удобство работы (интелиссенс) идёт наверно от 10-ка проектов и выше.
А ещё больше от нескольких физических человек-ролей.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / deploy веб-сервисов и теория по initialContext.lookup() - вопрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]