我有以下用于获取JDBC连接的类:
package util;
import java.sql.Connection;
import java.sql.SQLException;
import javax.annotation.Resource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class OracleConnection implements AutoCloseable{
private final String oracle_DS_CTX = "java:jboss/oracleDS";
// @Resource(name="java:jboss/oracleDS")
// private DataSource ds; //doesn't work
private Connection _conn;
public OracleConnection() throws SQLException, NamingException{
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(oracle_DS_CTX);
_conn = ds.getConnection();
}
@Override
public void close() throws Exception {
if(_conn != null){
_conn.close();
}
}
public Connection getConnection() throws SQLException {
return _conn;
}
}
使用@Resource
注释时遇到问题。通过InitialContext获得的数据源没有任何问题,但我不确定应该在资源名称中添加什么字符串(在我的代码中注释掉)。
我试过了:
@Resource(name="java:jboss/oracleDS")
@Resource(name="oracleDS")
AS是JBOSS AS7
答案 0 :(得分:10)
您在 standalone.xml 中定义了什么名称?
这是您需要在@Resource
但是有一个小技巧,您需要在查找属性中设置它而不是名称。
以下是一个示例,假设我的DS jndi为java:jboss/ExampleDS
。
@Resource(lookup = "java:jboss/ExampleDS")
private DataSource dataSource;