2012-05-16 3 views
1

이것은 내 jboss/deploy/postgres-ds.xml 파일입니다. 연결 URL, 사용자 이름 및 비밀번호가 여기에 제공됩니다. 내 서블릿에서이 데이터베이스에 어떻게 연결해야합니까? 이 후, 매번 수행해야하는 경우JBoss에서 데이터베이스에 연결 하시겠습니까?

Connection conn =null; // Create connection object 
     String database = "postgres"; // Name of database 
     String user = "postgres"; // 
      String password = "qwerty"; 
      String url = "jdbc:postgresql://localhost:5432/" + database; 
ResultSet rs = null; 
      ResultSetMetaData rsm = null; 
try{ 
Class.forName("org.postgresql.Driver").newInstance(); 
//.newInstance() 
} catch(Exception e) 
    { 
System.err.println(e); 
} 

try{ 
conn = DriverManager.getConnection(url, user, password); 

}catch(SQLException se) 
{ 
System.err.println(se); 
} 

왜 포스트 그레스-ds.xml 파일의 URL, 사용자 이름과 암호를 입력 :

<local-tx-datasource> 
     <jndi-name>PostgresDS</jndi-name> 
     <connection-url>jdbc:postgresql://localhost:5432/postgres</connection-url> 
     <driver-class>org.postgresql.Driver</driver-class> 
     <user-name>postgres</user-name> 
     <password>qwerty</password> 
      <!-- sql to call when connection is created 
      <new-connection-sql>some arbitrary sql</new-connection-sql> 
      --> 

      <!-- sql to call on an existing pooled connection when it is obtained from pool 
      <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql> 
      --> 

      <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) --> 

     </local-tx-datasource> 

나는 모든 서블릿이 같은 연결을 확보해야 ?

답변

5

당신이 얻을 데이터 소스를 사용할 수 있습니다

javax.naming.Context ic = new javax.naming.InitialContext(); 
javax.naming.Context ctx = (javax.naming.Context) ic.lookup("java:"); 
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("PostgresDS"); 
java.sql.Connection con = ds.getConnection(); 
+0

"java.sql.Connection의 콘 = ds.getConnection (

여기에 좋은 모두 방법을 보여 니펫); ". 이 함수를 호출 할 때마다 다른 연결 객체가 반환됩니까? – suraj

+2

시스템의 관점에서 "아니오 : 반드시 필요하지는 않습니다". JDBC 연결을 통해 DS를 사용하는 또 다른 이점은 DS를 사용하면 응용 프로그램 서버의 연결 풀링을 이용할 수 있다는 것입니다. – paulsm4

+0

@Satya "javax.naming.Context ctx = (javax.naming.Context) ic.lookup ("java : ");" 이 라인은 어디에서 조회를합니까? 세 번째 줄은 PostGres-ds.xml 파일에서 조회를 수행합니다. 권리? – suraj

0

JBoss로 작업하는 경우 JPA과 같은 포함 된 EE API를 활용하는 것이 좋습니다.

따라서 어디서나 연결 정보를 다시 입력 할 필요가 없습니다. 컨테이너가 서블릿에 EntityManager을 삽입하게하거나 (으로 EE 6을 사용하는 경우) DAO (EE6 제외)과 같은 것을 생성하십시오.

JBoss에서 최대 절전 모드를 사용하여 this JPA example을 살펴볼 수 있습니다.

1

같은 연결 없음 - (JBoss의 기반 응용 프로그램과 같은)는 J2EE 응용 프로그램에서 "데이터 소스"를 사용하고 당신이 원하는만큼 (표준 JDBC 연결을 열고 간단한 Java 응용 프로그램에서 수행)은 다소 상호 배타적입니다.

앱은 일반적으로 둘 중 하나를 수행합니다. 귀하의 경우 데이터 소스를 사용하십시오. 는 JNDI 데이터 소스를 사용하고 직접 JDBC 연결을 여는 :

http://www.javapractices.com/topic/TopicAction.do?Id=127

/** Uses JNDI and Datasource (preferred style). */ 
static Connection getJNDIConnection(){ 
String DATASOURCE_CONTEXT = "java:comp/env/jdbc/blah"; 

Connection result = null; 
try { 
    Context initialContext = new InitialContext(); 
    if (initialContext == null){ 
    log("JNDI problem. Cannot get InitialContext."); 
    } 
    DataSource datasource = (DataSource)initialContext.lookup(DATASOURCE_CONTEXT); 
    if (datasource != null) { 
    result = datasource.getConnection(); 
    } 
    else { 
    log("Failed to lookup datasource."); 
    } 
} 
catch (NamingException ex) { 
    log("Cannot get connection: " + ex); 
} 
catch(SQLException ex){ 
    log("Cannot get connection: " + ex); 
} 
return result; 
관련 문제