2013-03-21 2 views
4

나는 JDBC 연결을 얻기위한 클래스를 다음 있습니다 : 올바른 JNDI @Resource (이름)

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 문제가 작동하지만 문자열을 내가 (내 코드에서 주석으로) 리소스 이름에 넣어야할지 모르겠습니다.

I는 시도 :

@Resource (NAME = "자바 : 보스/oracleDS")

@Resource (NAME = "oracleDS")

을 JBOSS AS7

답변

8

이다 AS standalone.xml에 어떤 이름을 정의 했습니까? 당신이 당신의 @Resource

에서 정의해야하지만 약간의 트릭이의 이름입니다

, 당신은 이름 대신 조회 속성을 설정해야합니다.

예를 들어, 내 DS jndi가 java:jboss/ExampleDS이라고 가정 해 보겠습니다.

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

웹 콘솔 : 9990 포트로 생성했습니다. 하지만 standalone.xml을 살펴 보았고 올바른 이름 인 pool-name 속성이 있습니다. 고맙습니다. – Joe