2013-04-11 3 views
12

У меня есть следующие ...WebSphere: JNDI Context Lookup Failure

Context aContext = = new InitialContext(settings); 
aContext.lookup("java:comp/env/DB2_DB"); 

Также пробовал ...

aContext.lookup("DB2_DB"); 

web.xml

<resource-ref> 
    <description> 
    </description> 
    <res-ref-name>DB2_DB</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Application</res-auth> 
    <res-sharing-scope>Shareable</res-sharing-scope> 
    <mapped-name>DB2_DB</mapped-name> 
</resource-ref> 

то в моем IBM- web-bnd.xml ...

<resource-ref name="DB2_DB" binding-name="jdbc/DB2DB" /> 

В Websphere я вижу имя связывания ресурсов> JDBC> Источники данных

Но когда я запускаю мое приложение, я вижу ...

вызвано следующими причинами: javax.naming.NameNotFoundException: Контекст: Node04Cell/узлы/Node04/servers/server1, name: DB2_DB: первый компонент в имени DB2_DB не найден. [Root исключение org.omg.CosNaming.NamingContextPackage.NotFound: IDL: omg.org/CosNaming/NamingContext/NotFound: 1,0]^M

Это проект порта из WAS6-8.5

+0

Я предполагаю, что это исключение для поиска «DB2_DB». Каково исключение для поиска «java: comp/env/DB2_DB»? –

+1

Вы пришли сюда? У меня была аналогичная проблема, и для меня это была простая опечатка. –

+0

Я забыл, что сделал (если бы сделал это), чтобы решить эту проблему – Jackie

ответ

13

Ну, этот вопрос довольно старый, и я вижу, что пока нет ответа.

Вот что происходит на самом деле:

  1. Ваш код выполняет поиск JNDI для java:comp/env/DB2_DB.
  2. WebSphere использует дескриптор дескриптора WAS (ibm-web-bnd.xml) для «перевода» привязки приложения DB2_DB в настоящее имя в дереве JSDI WebSphere (jdbc/DB2DB).
  3. WebSphere просматривает jdbc/DB2DB и возвращает его вызывающему абоненту.

Вы получаете NameNotFoundException на первого поиска - в поиск по java:comp/env/DB2_DB. Проблема не в поиске jdbc/DB2DB; это с обнаружением DB2_DB внутри среды вашего компонента.

Ваш Дескриптор выглядит нормально для меня, поэтому я предполагаю, что причина вашей проблемы заключается в следующем:

Context aContext = new InitialContext(settings); 

Вы построение InitialContext экземпляра, обеспечивая Hashtable. Hashtable часто полезен, когда вам нужно предоставить специальные параметры для строительства, , но вы должны знать, когда его использовать и когда его избегать. Код, который запускается внутри контейнера JavaEE и требует простого доступа к дереву JNDI контейнера , редко, если он когда-либо должен предоставлять любые Hashtable конструктору InitialContext.

Я не удивлюсь, если те settings, что вы передаете в InitialContext содержат, например, PROVIDER_URL ключа инструктирования поиска произойдет на каком-то далеком иностранном JNDI дереве.

Итак, я хотел бы начать с слом этого параметра:

Context aContext = new InitialContext(); 

А затем дать ему еще один выстрел.

Если это все еще не удается, используйте утилиту WebSphere dumpNamespace, чтобы получить четкое представление о дереве JNDI WebSphere.

0

I Не уверен, что делает ibm-web-bnd.xml, однако вы можете попробовать две вещи.

Сначала вы можете попробовать глобальный поиск. Попробуйте:

aContext.lookup("jdbc/DB2DB"); 

Я предполагаю, что источник данных называется "JDBC/DB2DB" жгуты конфигурации источника данных.

В противном случае вы должны проверить, есть ли в вашем приложении datasource is mapped. Я полагаю, что ibm-web-bnd.xml должен правильно настроить это сопоставление.

+0

ibm-web-bnd.xml - это сопоставление от имени локального ресурса до ссылки JNDI в контейнере. – Jackie

Смежные вопросы