首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用资源注释的JNDI查找始终为空

使用资源注释的JNDI查找始终为空
EN

Stack Overflow用户
提问于 2021-02-16 23:20:27
回答 1查看 323关注 0票数 2

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

代码语言:javascript
复制
  @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
代码语言:javascript
复制
<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中定义资源时,引用链接是可选的。

感谢您的任何意见!

EN

回答 1

Stack Overflow用户

发布于 2021-02-16 23:45:40

This link是关于jboss的,但看起来也与您相关。它说,根据规范,用于执行JNDI查找的资源注释只能与EJB一起使用,因此它不适用于您的情况。

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

代码语言:javascript
复制
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource bean = (DataSource ) envCtx.lookup("jdbc/myDB");

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66227209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档