2

我无法将 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中的指示,但我没有取得任何成功。

4

3 回答 3

1

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

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

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

于 2012-07-18T01:06:05.943 回答
1

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

似乎当您使用本地资源引用时,您必须使用“java:comp/env/..”前缀来引用它,所以当我进行以下更改时,我的 java 代码可以工作:

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

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

于 2012-07-18T23:29:52.247 回答
0

与这个错误相关的话题真的不多,我最近在从旧的 Jboss 版本迁移到 WildFly 10 时遇到了它。

我发现我可以通过server.log grep来发现要在lookup.

于 2018-05-18T12:01:13.727 回答