Jdbc 从托管在WebSphereAppServer中的EclipseOSGibundle中访问JNDI

Jdbc 从托管在WebSphereAppServer中的EclipseOSGibundle中访问JNDI,jdbc,websphere,osgi,jndi,Jdbc,Websphere,Osgi,Jndi,我在从OSGI捆绑包中访问JNDI资源时遇到问题,该捆绑包位于 WebSphereApplicationServer(WAS)使用servlet桥 它无法创建JNDI初始上下文。我的代码是: Hashtable env=新的Hashtable() 环境放置(Context.INITIAL\u Context\u工厂, “com.ibm.websphere.naming.WsnInitialContextFactory”) InitialContext ctx=新的InitialContext(e

我在从OSGI捆绑包中访问JNDI资源时遇到问题,该捆绑包位于

WebSphereApplicationServer(WAS)使用servlet桥

它无法创建JNDI初始上下文。我的代码是:

Hashtable env=新的Hashtable()

环境放置(Context.INITIAL\u Context\u工厂, “com.ibm.websphere.naming.WsnInitialContextFactory”)

InitialContext ctx=新的InitialContext(env)

这在以下情况下失败:

javax.naming.NoInitialContextException: 无法使用哈希表{java.naming.provider.url=corbaloc:rir:/nameserverroot,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}中指定的工厂创建InitialContext[根异常为java.lang.NullPointerException]

当我直接在WAR模块中运行相同的代码(不使用OSGI)时,它是成功的。因此,我假设问题在于从OSGI中访问JNDI

在OSGI中访问JNDI时,我看到一些关于类装入器问题的引用…不确定这是否是我的问题,因为上面的异常与类装入没有明确的关系,但可能是。无论如何,如果这是问题,我不确定如何修复它

实际上是否可以从我的OSGI模块中访问WAS中设置的JNDI和JDBC条目

我的应用程序是一个Eclipse RAP(富Ajax插件),使用Eclipse WAR产品工具打包到WAR文件中,描述如下:

到目前为止,除了JNDI访问之外,它还可以成功地工作

非常感谢


David

默认情况下,线程上下文类加载器将用于加载InitialContextFactory。这可能是(但不保证)您的包的类加载器。您有两个选项:

  • 配置org.osgi.framework.bootdegration属性。这可能隐式设置为sun.,com.sun。因此您希望将其更改为sun.,com.sun.,com.ibm.websphere.naming。*我相信这可以在servlet桥wars WEB-INF/launch.ini中设置
  • 您还可以导入comibm.websphere.naming,这将需要您添加到launch.ini org.osgi.framework.system.packages.extra=com.ibm.websphere.naming
  • 两者都应该有效。
    祝你好运。

    这可能无法解决你的问题(因此它是以注释的形式出现的),但我会丢失
    env.put(context.INITIAL_context_FACTORY…
    line。初始上下文工厂类的名称通常已经由运行时环境提供。谢谢,我认为您不需要该行是正确的,因为默认情况下假定该值,但去掉它并不能解决问题。