【发布时间】:2026-02-06 19:45:01
【问题描述】:
我在 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
有人可以帮我吗?
【问题讨论】:
-
尝试在war中将org.osgi.framework.system.packages.extra=org.apache.naming.java添加到launch.ini中。我从未尝试过这座桥,但对战争有过一分钟的了解,我认为这将解决您的问题。如果是的话,我会从评论中回答。
-
不行。我试过之后仍然遇到同样的问题。你建议添加任何其他 jar 吗?
-
这个可能是相关的:wiki.eclipse.org/…。父类加载器是不包含所需包的 ext。您可以尝试使用其他类加载器,如 app 或 fwk。他们说:“这通常也是一个坏主意”,但是,我认为您无法访问 Tomcat 的 JNDI。再次请注意,这只是一个提示,不是我自己尝试的解决方案。
-
当我将类加载器更改为 fwk 时它工作了。非常感谢!!
-
我从中做出了回答。
标签: tomcat servlets osgi equinox embedded-osgi