【问题标题】:Correct JNDI @Resource(name)正确的 JNDI @Resource(name)
【发布时间】:2013-03-10 23:45:36
【问题描述】:

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

【问题讨论】:

    标签: java jboss jndi


    【解决方案1】:

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

    这是您需要在 @Resource 中定义的名称

    但是有一个小技巧,你需要在lookup属性中设置它而不是name

    这是一个例子,假设我的 DS jndi 是java:jboss/ExampleDS

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

    【讨论】:

      猜你喜欢
      • 2015-11-15
      • 2014-06-05
      • 2016-02-27
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多