从部署在tomcat上的OSGI equinox bundle进行JNDI查找(桥接模式)



我在tomcatcontext.xml中配置了我的数据源。我布置了一座桥。

我已经开发了另一个包含servlet注册代码的osgi包,我的目标是从这个servlet包中JNDI查找数据源。

但是我得到

javax.naming.NoInitialContextException:Cannot instantiate class: org.apache.naming.java.javaURLContextFactory (root cause classnotfound for org.apache.naming.java.javaURLContextFactory)

当我尝试在OSGI bundle

中执行以下代码时
        Context initContext = new InitialContext();
        Context envContext = (Context) initContext.lookup("java:/comp/env");
        DataSource ds = (DataSource) envContext.lookup("jdbc/TestDB");

我已经在osgi容器中添加了catalina.jar,并将其作为osgi bundle的依赖项。

我的launch.ini of bridge。战争是这样的:

osgi.*=@null
org.osgi.*=@null
eclipse.*=@null
osgi.parentClassloader=ext
osgi.contextClassLoaderParent=ext
org.osgi.framework.system.packages.extra=org.apache.naming.java
有人能帮我一下吗?

嵌入式OSGi容器的父类是ext: Java扩展类加载器

为了能够看到Tomcat的类,必须在launch.ini中将父类加载器更改为fwk:

通过这样做,嵌入式OSGi容器的父类加载器是web应用程序的类加载器。如果嵌入式OSGi容器中的一个bundle想要直接使用webapp或Tomcat中的一个类,你可能必须使用org.osgi.system.packages.extra设置列出该类的包。

关于嵌入式Equinox父类加载器的更多信息: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

相关内容

  • 没有找到相关文章

最新更新