我有一个带有Tomcat10的WebApp,使用Jersey3的Java11。我在我的context.xml中定义了一个ConnectionPool来处理到我的OracleDB的连接,现在我正在尝试通过@Resource注释在我的控制器中访问DataSource。这应该会调用一个JNDI-lookup。不幸的是,我总是得到一个NPE,因为它似乎在运行时找不到资源……我做错了什么?或者正确的mappedName / lookup是什么?
@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中定义资源时,引用链接是可选的。
感谢您的任何意见!
发布于 2021-02-16 23:45:40
This link是关于jboss的,但看起来也与您相关。它说,根据规范,用于执行JNDI查找的资源注释只能与EJB一起使用,因此它不适用于您的情况。
一种解决方法是以编程方式查看数据源是否正常工作:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource bean = (DataSource ) envCtx.lookup("jdbc/myDB");如果你能找到你的数据源,你可以试着优化以避免上面的“手动”查找。
https://stackoverflow.com/questions/66227209
复制相似问题