2013-03-21 61 views
4

我有以下类获得JDBC连接: 正确的JNDI @资源(名称)

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获得的数据源工作witohout问题,但我不知道我应该把什么字符串放入资源名称(在我的代码中注释掉)。

我曾尝试:

@Resource(名称= “java的:的JBoss/oracleDS”)

@Resource(名称= “oracleDS”)

AS是JBOSS AS7

回答

8

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

这就是你需要在你@Resource

定义,但有一个小窍门的名字,则需要将其设置在查找属性,而不是

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

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

我使用Web控制台:9990端口创建它。但是我查看了standalone.xml,并且有一个pool-name属性,它是正确的名称。解决,谢谢。 – Joe 2013-03-21 14:11:32