Помогите настроить JNDI со встроенным JBoss в Tomcat 5.5.x - PullRequest
5 голосов
/ 23 сентября 2008

Когда я пытаюсь выполнить следующий поиск в моем коде:

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
return (DataSource) envCtx.lookup("jdbc/mydb"); 

Я получаю следующее исключение:

java.sql.SQLException: QueryResults: Unable to initialize naming context: 
    Name java:comp is not bound in this Context at 
    com.onsitemanager.database.ThreadLocalConnection.getConnection
    (ThreadLocalConnection.java:130) at     
    ...

Я установил встроенный JBoss, следуя вики-инструкциям JBoss . И я настроил Tomcat, используя развертывание «Сканирование каждой WAR по умолчанию», как указано на странице конфигурации .

Цитирование страницы конфигурации:

JNDI

Встроенные компоненты JBoss, такие как пул соединений, EJB, JPA и транзакции широкое использование JNDI для публикации услуг. Встроенный JBoss переопределяет JNDI Tomcat реализация путем наложения себя поверх реализации JNDI Tomcat. Для этого есть несколько причин:

  1. Чтобы не объявлять каждую из этих служб в server.xml
  2. Чтобы разрешить невидимую интеграцию пространства имен java: comp между веб-приложениями и EJBs.
  3. В реализации Tomcat JNDI есть несколько критических ошибок, которые мешают некоторым JBoss работоспособность компонентов
  4. Мы хотим предоставить вам возможность удаленного взаимодействия EJB-компонентов и других служб, которые можно> удаленно искать

У кого-нибудь есть мысли о том, как настроить службу именования JBoss, которая в соответствии с приведенной выше цитатой переопределяет реализацию JNDI Tomcat, чтобы я мог найти java: comp / env?

К вашему сведению - Моя среда Tomcat 5.5.9, Seam 2.0.2sp, встроенный JBoss (бета-версия 3),

Примечание. У меня действительно есть файл -ds.xml для подключения к базе данных, который правильно настроен и доступен по пути классов в соответствии с инструкциями.

Также обратите внимание: я разместил этот вопрос на встроенном форуме Jboss и форуме пользователей seam.

Ответы [ 3 ]

2 голосов
/ 23 сентября 2008

Спасибо за ответный инструментарий .... да, я могу получить доступ к своему источнику данных, перейдя непосредственно к java: jdbc / mydb, но я использую существующую базу кода, которая соединяется через ENC. Вот некоторая интересная информация, которую я узнал ....

  1. Приведенный выше код работает с JBoss 4.2.2.GA и вот используемые параметры JNDI ctx:
    java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs = org.jboss.naming: org.jnp.interfaces: org.jboss.naming: org.jnp.interfaces

  2. Приведенный выше код работает с Tomcat 5.5.x , и здесь используются параметры ctx JNDI:
    java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs = org.apache.naming

  3. Приведенный выше код завершается ошибкой с Embedded JBoss (Beta 3) в Tomcat 5.5.x с приведенным выше сообщением об ошибке.
    java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs = org.apache.naming. Приведенный выше код завершается ошибкой с вышеуказанной ошибкой при использовании JBoss Embedded в tomcat 5.5.x

У кого-нибудь есть мысли, что мне нужно сделать для настройки встроенной конфигурации JBoss JNDI?

1 голос
/ 07 июня 2011

У меня была похожая проблема с Jboss Embedded, и я наконец исправил воспроизведение в файле: тест-Datasource-ds.xml

добавление

<mbean code="org.jboss.naming.NamingAlias" name="jboss.jmx:alias=testDatasource">
    <attribute name="FromName">jdbc/Example DataSource</attribute>
    <attribute name="ToName">java:/testDatasource</attribute>
</mbean>

Проблема была в том, что jboss добавил префикс java: / для всех объявленных источников данных. Наконец, у меня был источник данных с именем testDatasource, переопределенный этой директивой для jdbc / Example DataSource

Надеюсь, что это работает

1 голос
/ 23 сентября 2008

java: comp / env известен как Enterprise Naming Context (ENC) и не виден глобально. См. здесь для получения дополнительной информации. Вам нужно будет найти глобальное имя JNDI, под которым регистрируется ваш источник данных.

Самый простой способ сделать это - перейти к веб-консоли JMX JBoss и найти mN 'JNDIView' (не совсем уверен в названии - в настоящее время дома). У этого mbean должен быть метод списка, который вы можете вызвать, который будет отображать контекстный путь для всех объектов, связанных с JNDI.

...