【发布时间】:2010-10-12 12:15:58
【问题描述】:
我在访问托管在
中的 OSGI 包中的 JNDI 资源时遇到问题使用 servlet 桥接的 WebSphere Application Server (WAS)。
创建 JNDI 初始上下文失败。我的代码是:
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
InitialContext ctx = new InitialContext(env);
这失败了:
javax.naming.NoInitialContextException: 无法使用哈希表中指定的工厂创建 InitialContext {java.naming.provider.url=corbaloc:rir:/NameServiceServerRoot, java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory, java.naming.factory.url .pkgs=com.ibm.ws.naming:com.ibm.ws.runtime:com.ibm.iscportal.jndi} [根异常是 java.lang.NullPointerException]
当我直接在 WAR 模块中运行相同的代码(不使用 OSGI)时,它是成功的。因此,我认为问题在于从 OSGI 中访问 JNDI。
我在从 OSGI 中访问 JNDI 时看到了一些对类加载器问题的引用……不确定这是否是我的问题,因为上述异常与类加载没有明确关系,但也许确实如此。无论如何,如果这是问题,我不知道如何解决它!
实际上是否可以从我的 OSGI 模块中访问在 WAS 中设置的 JNDI 和 JDBC 条目?
我的应用程序是一个 Eclipse RAP(Rich Ajax 插件),使用以下描述的 Eclipse WAR 产品工具打包到一个 WAR 文件中:
http://eclipsesource.com/blogs/2010/08/17/equinoxrap-war-deployment-an-end-to-the-pain/
到目前为止,除了 JNDI 访问之外,这工作成功。
非常感谢
大卫
【问题讨论】:
-
这可能无法解决您的问题(因此它是评论的形式),但我会丢失
env.put(context.INITIAL_CONTEXT_FACTORY....行。初始上下文工厂类的名称通常已由运行时环境提供。 -
谢谢,我认为不需要该行是对的,因为无论如何默认情况下都会假定该值,但将其取出并不能解决问题。