微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有资源注释的 JNDI 查找始终为 NULL

如何解决带有资源注释的 JNDI 查找始终为 NULL

我有一个带有 Tomcat 10 的 WebApp,使用 Jersey3 的 Java11。 我在 context.xml 中定义了一个 ConnectionPool 来处理与 OracleDB 的连接,现在我尝试通过 @Resource 注释访问控制器中的数据源。这应该调用 JNDI 查找。不幸的是,我总是得到一个 NPE,因为它似乎在运行时找不到资源......我做错了什么?或者正确的映射名称/查找是什么?

  @Path("/data")
public class DataController  {

    @Context
    ServletContext context;

    @Resource(lookup = "java:/jdbc/myDB") //also tried java:/comp/env/jdbc/myDB and mappedname="jdbc/myDB"
    protected DataSource ds; //always null
<Context name="myapp">
<Resource type="javax.sql.DataSource"
          name="jdbc/myDB"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:@//localhost:1521/orcl"
          username="xy"
          password="xy"/>

根据教程,当我直接在 context.xml 中定义资源时,ref-link 是可选的。

感谢您的任何意见!

解决方法

This link 是关于 jboss 的,但似乎也与您有关。它说根据规范,进行 JNDI 查找的资源注释仅适用于 EJB,因此不适用于您的情况。

一种解决方法是以编程方式查看您的数据源是否正常工作:

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource bean = (DataSource ) envCtx.lookup("jdbc/myDB");

如果你能找到你的数据源,你就可以尝试优化以避免上面的“手动”查找。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。