WebSphere:JNDI上下文查找失败

Jac*_*kie 13 websphere

我有以下......

Context aContext = = new InitialContext(settings);
aContext.lookup("java:comp/env/DB2_DB");
Run Code Online (Sandbox Code Playgroud)

还试过......

aContext.lookup("DB2_DB");
Run Code Online (Sandbox Code Playgroud)

web.xml中

<resource-ref>
    <description>
    </description>
    <res-ref-name>DB2_DB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Application</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
    <mapped-name>DB2_DB</mapped-name>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)

然后在我的ibm-web-bnd.xml中......

<resource-ref name="DB2_DB" binding-name="jdbc/DB2DB" />
Run Code Online (Sandbox Code Playgroud)

在Websphere中,我在资源> JDBC>数据源中看到绑定名称

但是当我运行我的应用程序时,我看到......

引发者:javax.naming.NameNotFoundException:上下文:Node04Cell/nodes/Node04/servers/server1,name:DB2_DB:找不到名称DB2_DB中的第一个组件.[root例外是org.omg.CosNaming.NamingContextPackage.NotFound:IDL:omg.org/CosNaming/NamingContext/NotFound:1.0] ^ M

这是WAS6-8.5的一个港口项目

Isa*_*aac 14

嗯,这个问题很老了,我看到还没有接受的答案,所以.

这是真正发生的事情:

  1. 您的代码执行JNDI查找java:comp/env/DB2_DB.
  2. WebSphere使用WAS专有的部署描述符(ibm-web-bnd.xml)将应用程序绑定"转换" DB2_DB为WebSphere JNDI树(jdbc/DB2DB)中的真实名称.
  3. WebSphere查找jdbc/DB2DB并将其返回给调用者.

你得到一个NameNotFoundException第一查找-的查找java:comp/env/DB2_DB.问题不在于找到jdbc/DB2DB; 它是DB2_DB在组件的环境中找到的.

您的部署描述符对我来说没问题,所以我猜你问题的原因是这样的:

Context aContext = new InitialContext(settings);
Run Code Online (Sandbox Code Playgroud)

您正在InitialContext通过提供一个实例来构建实例Hashtable.在Hashtable当你需要为建筑提供特殊的参数往往是有用的,但你必须知道什么时候使用它,什么时候,以避免它.一个JavaEE的容器内运行需要简单地访问容器的JNDI树代码很少,如果有的话,应提供任何HashtableInitialContext构造函数.

如果settings您传入的那些InitialContext包含例如PROVIDER_URL指示查找在某个远程外部JNDI树上发生的键,那么我不会感到惊讶.

所以,我将从废弃该参数开始:

Context aContext = new InitialContext();
Run Code Online (Sandbox Code Playgroud)

再给它一个镜头.

如果仍然失败,请使用WebSphere的dumpNamespace实用程序来清楚地了解WebSphere的JNDI树.