NameNotFoundException将JNDI数据源映射到本地名称

时间:2012-07-18 00:59:59

标签: java jndi weblogic12c

我无法将Weblogic(12c)定义的JNDI数据源映射到本地jndi名称。

我在weblogic mysql数据源中有一个数据源定义为“mysqltestds”,我想在Web应用程序中将i映射到本地名称“localds”

我的web.xml属性是

<resource-ref>
   <res-ref-name>localds</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
</resource-ref>

使用weblogic.xml

<weblogic-web-app>
   <resource-description>
      <res-ref-name>localds</res-ref-name>
      <jndi-name>mysqltestds</jndi-name>lls
   </resource-description>
</weblogic-web-app>

当我使用全局名称“mysqltestds”获取数据源时,它可以正常工作。

Context initialContext = new InitialContext();
Object resource = initialContext.lookup("mysqltestds");
dataSource = (DataSource) resource; 

然而,当我尝试“localds”时,它失败并出现错误:

Context initialContext = new InitialContext();
Object resource = initialContext.lookup("localds");
dataSource = (DataSource) resource; 
  

javax.naming.NameNotFoundException:无法解析'localds'。解决 '';剩余名称'localds'

任何人都可以提供帮助。我按照此stackOverflow问题Tomcat vs Weblogic JNDI Lookup中的说明进行操作,但我没有取得任何成功。

3 个答案:

答案 0 :(得分:1)

偶然的事情。
首先要检查的是确保您实际将数据源部署到您正在访问的服务器。因为如果你没有,你会收到确切的信息。

如果您在控制台中查看服务器页面并单击您正在使用的服务器,也可以。

然后在页面上有一个名为jndiViewer的链接,您应该能够浏览数据源以确认其位置。

答案 1 :(得分:1)

我最终通过反复试验来解决这个问题。

当你使用本地资源引用时,你必须使用“java:comp / env / ..”前缀来引用它,所以当我做出以下更改时,我的java代码才有效:

Context initialContext = new InitialContext();
Object resource = initialContext.lookup("java:comp/env/localds");
dataSource = (DataSource) resource; 

希望如果其他人遇到类似的问题,这是有用的

答案 2 :(得分:0)

与此错误相关的主题并不多,最近我从旧的Jboss版本迁移到WildFly 10时遇到过这个问题。

我发现我可以通过 server.log 来发现要在lookup中使用的正确字符串。