我有以下......
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中,我在资源&gt; JDBC&gt; Data Sources
中看到了绑定名称但是当我运行我的应用程序时,我看到......
引起: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的端口项目
答案 0 :(得分:14)
嗯,这个问题很老了,我发现还没有接受答案,所以。
以下是真实情况:
java:comp/env/DB2_DB
的JNDI查找。ibm-web-bnd.xml
)来&#34;翻译&#34;应用程序将DB2_DB
绑定到WebSphere JNDI树(jdbc/DB2DB
)中的实名。jdbc/DB2DB
并将其返回给调用者。您在第一次查询中获得了NameNotFoundException
- java:comp/env/DB2_DB
的查找。问题不在于找到jdbc/DB2DB
;它在您的组件环境中找到DB2_DB
。
您的部署描述符对我来说没问题,因此我猜测您的问题的原因是:
Context aContext = new InitialContext(settings);
您正在通过提供InitialContext
来构建Hashtable
实例。当您需要为构造提供特殊参数时,Hashtable
通常很有用,但您必须知道何时使用它以及何时避免。在JavaEE容器内运行且需要对容器的简单访问的代码很少,如果有的话,应该向Hashtable
构造函数提供任何InitialContext
。< / p>
如果您settings
传递给InitialContext
的那些PROVIDER_URL
包含一个Context aContext = new InitialContext();
键,指示查找在某些内容上发生,我不会感到惊讶遥远的外国JNDI树。
所以,我将从废弃该参数开始:
dumpNamespace
然后再拍一次。
如果仍然失败,请使用WebSphere的{{1}}实用程序来清楚地了解WebSphere的JNDI树。
答案 1 :(得分:0)
我不确定ibm-web-bnd.xml是做什么的,但你可以尝试两件事。
首先,您可以尝试进行全局查找。尝试:
aContext.lookup("jdbc/DB2DB");
我假设数据源名为“jdbc / DB2DB”,并带有数据源配置。
否则,您应该检查应用程序中的datasource is mapped。我想ibm-web-bnd.xml应该在正确设置时进行映射。
答案 2 :(得分:0)
转储名称空间,并在要查找的目标下找到jndi。如果找不到,请将corbaloc URL更新为目标中指定的URL。因为查找是在我的本地环境中进行的,但在群集环境中却没有进行。我转储了名称空间并标识了corbaloc URL。然后在SIT环境中使用该corbaloc URL。
示例:JMS_HOST在本地为corbaloc :: localhost:2809 / NameServiceServerRoot,但在集群环境中为JMS_HOST = corbaloc :: ABC-DEF-XYZ:9810 / NameServiceServerRoot
这解决了我的问题。