正确JNDI @Resource(名称)

时间:2013-03-21 12:46:20

标签: java jboss jndi

我有以下用于获取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

1 个答案:

答案 0 :(得分:10)

您在 standalone.xml 中定义了什么名称?

这是您需要在@Resource

中定义的名称

但是有一个小技巧,您需要在查找属性中设置它而不是名称

以下是一个示例,假设我的DS jndi为java:jboss/ExampleDS

@Resource(lookup = "java:jboss/ExampleDS")
private DataSource dataSource;