WebSphere:JNDI上下文查找失败

eipsum 发布于 2019-03-09 websphere 最后更新 2019-03-09 14:31 0 浏览

我有以下...

Context aContext = = new InitialContext(settings);
aContext.lookup("java:comp/env/DB2_DB");
也试过...
aContext.lookup("DB2_DB");
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>
然后在我的ibm-web-bnd.xml中...
<resource-ref name="DB2_DB" binding-name="jdbc/DB2DB" />
在Websphere中,我在资源> JDBC>数据源中看到绑定名称 但是当我运行我的应用程序时,我看到...
Caused by: javax.naming.NameNotFoundException: Context: Node04Cell/nodes/Node04/servers/server1, name: DB2_DB: First component in name DB2_DB not found. [Root exception is org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]^M
这是来自WAS6-8.5的港口项目
已邀请:

zet

赞同来自:

我不确定ibm-web-bnd.xml是做什么的,但你可以尝试两件事。 首先,您可以尝试进行全局查找。尝试:

aContext.lookup("jdbc/DB2DB");
我假设数据源名为“jdbc / DB2DB”,具有数据源配置。 否则,您应该检查应用程序中的datasource is mapped。我想ibm-web-bnd.xml应该在正确设置时进行映射。

eet

赞同来自:

嗯,这个问题很老了,我看到还没有接受的答案,所以。 这是真正发生的事情:

  1. 您的代码对java:comp/env/DB2_DB执行JNDI查找。
  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);
您正在通过提供Hashtable来构建InitialContext实例。当您需要为构造提供特殊参数时,Hashtable通常很有用,但您必须知道何时使用它以及何时避免它。在JavaEE容器内运行并且需要简单访问容器的JNDI树的代码很少(如果有的话)应该向InitialContext构造函数提供任何Hashtable。 如果您传入InitialContext的那些settings包含,例如,PROVIDER_URL键指示查找在某个远程外部JNDI树上发生,我不会感到惊讶。 所以,我将从废弃该参数开始:
Context aContext = new InitialContext();
再给它一个镜头。 如果仍然失败,请使用WebSphere的dumpNamespace实用程序来清楚地了解WebSphere的JNDI树。