我在 tomcat\context.xml 中配置了数据源。我部署了Eclipse提供的bridge.war来获取servletbridge环境。
我开发了另一个 osgi 包,其中包含 servlet 注册代码,我的目标是通过 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 容器中的包想要直接使用 web 应用程序或 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 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 http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)