5

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

4

1 回答 1

11

你在你的 中定义了什么名字standalone.xml

那是您需要在您的@Resource

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

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

@Resource(lookup = "java:jboss/ExampleDS")
private DataSource dataSource;
于 2013-03-21T13:04:09.377 回答