2013-03-21 62 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