我在tomcat \ context.xml中配置了数据源。我已经部署了Eclipse提供的bridge.war来获取servletbridge环境。
我开发了另一个包含servlet注册代码的osgi包,我的目的是让JNDI从该servlet包中查找数据源。
但是我明白了
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");
我在osgi容器中添加了catalina.jar,也将其作为osgi包中的依赖项。
我的bridge.war的launch.ini如下所示:
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框架类加载器。
这样,嵌入式OSGi容器的父类加载器就是Web应用程序的类加载器。如果嵌入式OSGi容器中的捆绑软件想直接使用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