2008-09-23 5 views
5

Когда я пытаюсь следующий поиск в моем коде:Помощь настройке JNDI с встроенным JBoss в Tomcat 5.5.x

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 wiki instructions. И я настроил Tomcat, используя развертывание «Сканирование каждой WAR по умолчанию», как указано в configuration wiki page.

Цитируя страницу конфигурации:

JNDI

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

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

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

FYI - Моя среда Tomcat 5.5.9, Seam 2.0.2sp, врезанный JBoss (Beta 3),

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

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

ответ

2

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

  1. Приведенный выше код работает с JBoss 4.2.2.GA и здесь используются параметры ctx JNDI:
    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 и вот параметры JNDI CTX используются:
    java.naming.factory.initial = орг. 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?

+0

ли вы найти решение? У меня также есть эта проблема. Приложение отлично работает с родным tomcat, источники данных работают, как ожидалось, но когда JBoss внедрен, я получаю сообщение «Имя java: comp не связано в этом контексте». –

1

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

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

1

Я имел некоторые аналогичные проблемы с 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/Пример DataSource

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