2012-05-15 8 views
0

데이터 소스 개체를 사용하여 연결 풀에서 Oracle JDBC 연결을 가져옵니다. 그리고 (자바 정적 메서드를 통해) 자바에서 DB에 몇 가지 로그를 삽입하는 연결을 사용합니다. 사용자 당 약 10-20 개의 삽입이 있기 때문에 내가하고있는 일은 필터의 요청 수준에서 연결을 커밋하고 세션 청취자의 sessionDestroyed() 메서드를 통해 세션 수준에서 연결을 닫는 것입니다. 다음과 같이 테스트뿐만 프로덕션 환경에서 오류가 나는 연결 풀에서 SQLException 오류가 발생합니다.

java.sql.SQLException: execute, Exception = null (one scenario) 
java.sql.SQLException: close, Exception = null (for another scenario) 

어떻게 이러한 오류를 방지하기 위해, 몇 가지 오류는 무엇입니까? 대신 요청 레벨에서 커밋하고 세션 레벨에서 닫는 대신 Java 정적 메서드에서 연결을 커밋하고 닫을 수 있습니까?

그러나 내게 할 수 이러한 오류가

if (con.isClosed() || con == null) { 
DBConnectionHelper connHelper = DBConnectionHelper.createInstance(); 
    con=connHelper.getConnection("ds"); 
    con.setAutoCommit(false); 
} 

그래서 내가 위를 확인하고, 내 자바 정적 메서드에 아래의 논리를 가지고 Ɒ이를 발생하는하는 등 방법 연결이 없다는 것입니다 무엇을 즐겁게한다 내가 사형 집행을하려 할 때 문을 닫을 수 있습니까? 그러나 확실하지 않고 왜 혼란스러워하는지.

+0

왜 연결 풀에서 연결을 닫으시겠습니까? 또한 if에서 con가 con.isClosed() 전에 null인지 먼저 확인합니다. – Mike

+0

@Mike : 일부 연결 풀은'close()'호출을 가로 채고 대신 풀에 연결을 반환합니다. – skaffman

+0

@skaffman - 처음 연결하기 전에 'con'은 무엇을 가리 킵니까? –

답변

1

죄수 개체가 null 인 것 같습니까?

는 다음 블록을 고려 : 연결이 닫혀있는 경우

if (con.isClosed() || con == null) { 
DBConnectionHelper connHelper = DBConnectionHelper.createInstance(); 
    con=connHelper.getConnection("ds"); 
    con.setAutoCommit(false); 
} 

먼저 물어. 그런 다음 null인지 확인합니다. con가 실제로 null 인 경우 NullpointerException이 발생합니다.

스위치 점검하고

if (con == null || con.isClosed()) { 

if (con == null || con.isClosed()) { 
DBConnectionHelper connHelper = DBConnectionHelper.createInstance(); 
    con=connHelper.getConnection("ds"); 
    con.setAutoCommit(false); 
} 
+0

잘 바꾸어서 보도록하겠습니다. 그리고 수동으로 연결 풀 개체를 정적 Java 메서드로 또는 닫을 때 한 번 닫아야합니까 (Session Listener의 sessionDestroyed() 메서드 에서처럼)? –

1

변경

if (con.isClosed() || con == null) { 

:-) 아무것도 할 수 있는지 그리고 차이가 있는지.

어떻게 성공적으로 con=connHelper.getConnection("ds");을 확인 했습니까?
내가 그런 경우 con.setAutoCommit(false);
을 실행하기 전에 connull입니다 두려워, 당신은 생산 DB에 대한 연결 문자열이 올바른지 확인해야합니다.

+0

내가 그것을 바꾸고 보자.그리고 수동으로 연결 풀 개체를 정적 Java 메서드로 또는 닫을 때 한 번 닫아야합니까 (Session Listener의 sessionDestroyed() 메서드 에서처럼)? –

관련 문제