Поиск JNDI из пакета равноденствия OSGI, развернутого на tomcat (мостовой режим)
Мой источник данных настроен в tomcat\context.xml. Я развернул bridge.war, предоставленный Eclipse, чтобы получить среду servletbridge.
Я разработал еще один пакет osgi, который содержит код регистрации сервлета, и моя цель состоит в том, чтобы JNDI искал источник данных из этого пакета сервлета.
Однако я получаю
javax.naming.NoInitialContextException:Cannot instantiate class: org.apache.naming.java.javaURLContextFactory (root cause classnotfound for org.apache.naming.java.javaURLContextFactory)
когда я пытаюсь следующий код в моем OSGI-комплекте
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/TestDB");
Я добавил catalina.jar в мой контейнер OSGI также в качестве зависимости в моем комплекте OSGI.
Мой launch.ini из bridge.war выглядит так:
osgi.*=@null
org.osgi.*=@null
eclipse.*=@null
osgi.parentClassloader=ext
osgi.contextClassLoaderParent=ext
org.osgi.framework.system.packages.extra=org.apache.naming.java
Может ли кто-нибудь помочь мне с этим?
1 ответ
Родитель встроенного контейнера OSGi - ext: Загрузчик класса расширения Java
Чтобы видеть классы Tomcat, родительский загрузчик классов должен быть изменен в файле launch.ini на fwk: загрузчик классов платформы OSGi.
При этом родительский загрузчик классов встроенного контейнера OSGi будет загрузчиком классов веб-приложения. Если пакет во встроенном контейнере OSGi хочет использовать класс из веб-приложения или Tomcat напрямую, вам, возможно, придется перечислить пакет класса с параметром org.osgi.system.packages.extra.
Дополнительная информация о родительских загрузчиках классов встроенного равноденствия: http://wiki.eclipse.org/FAQ_How_do_I_add_a_library_to_the_classpath_of_a_plug-in%3F
Дополнительная информация об иерархии загрузчиков классов Tomcat: http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html