2014-07-21 4 views
0

문제점 Websphere 애플리케이션 서버를 통해 구성된 Oracle 데이터베이스에 연결된 Java 웹 애플리케이션이 있습니다. 연결은 일반 JDBC 연결 (DriverManager.getConnection())이 아닌 데이터 소스 연결입니다. 따라서 con.colse()를 수행 할 필요가 없습니다. 연결 풀 크기는 10입니다. 데이터베이스 쪽에서 열려있는 연결 수는 500 개가 넘습니다. v $ 세션 테이블에 개 이상의 500 연결이 열려 있습니다. 우리는 오직 한 명의 사용자 만 db에 연결합니다. 모든 연결은 사용자 에 속합니다. 내 질문은 연결이 유휴 시간이나 종료 후 종료되지 않는 이유는 무엇입니까? 대부분의 연결 은 유휴 상태이며 databse에 대한 sql 쿼리를 실행하는 데 사용하지 않지만 연결은 열려 있습니다. 웹 스피어 설정입니까, 아니면 Oracel DBA 설정입니까? 연결 풀에서만 연결을 사용하도록 Websphere를 구성하는 방법 세션 아웃 시간 또는 기본 시간 (예 : 30 분) 후에 수동으로 연결하지 않도록 DBA Oracle 설정을 수행 하시겠습니까? 도와주세요 감사합니다, 크리슈나 [email protected]오라클 데이터베이스에서 연결이 닫히지 않음

+2

같은 당신이 필요로 제시 지적에'close()를'당신이 그것으로 완료 연결. 너는 왜 다르게 생각하니? –

+0

Elliott Frisch 감사합니다. 이것은 오래된 응용 프로그램입니다. 최근에는 연결 문제가 발생합니다. 나는 코드를 점검했다. 하나의 메소드 인 closeJDBCObjects()에서 모든 커넥션을 닫고, finally 블록에 새로운 커넥션이 생성되는 모든 장소에서 호출한다. – krishna

+0

내 블로그 게시물 [여기] (http://www.frischcode.com/2013/11/clean-up-after-yourself.html)을보십시오. 그리고 당신이 말하는 것을하고 있는지 확인하십시오. –

답변

3

방법은 그것이 그것으로 완료되면 코드가 연결을 종료 할 필요가 없다는 의미에서이 데이터 소스를 사용하고 있다는 사실. 연결을 얻는 방법에 관계없이 연결을 완료 한 후에 연결을 닫아야합니다.

DataSource tutorial, 예를 들어, 명시 적으로 연결을 닫아야합니다 및

try { 
    Connection con = ds.getConnection(username, password); 
    // ... code to use the pooled 
    // connection con 
} catch (Exception ex { 
    // ... code to handle exceptions 
} finally { 
    if (con != null) con.close(); 
} 
+0

감사합니다 Justin Cave, 이건 오래된 응용 프로그램입니다. 최근에는 연결 문제가 발생했습니다. 코드를 확인 했으므로 하나의 메서드 closeJDBCObjects()에서 모든 연결을 닫고 finally 블록에 새 연결이 만들어지는 모든 장소에서 호출합니다. – krishna

+0

@krishna - 응용 프로그램 서버에 데이터베이스와 연결이 500 개 연결되어있는 경우 중간 계층의 풀이 500 개의 연결을 원하도록 구성되어 있지 않으면 거의 확실하게 연결을 닫지 않는 경우입니다. 응용 프로그램의 어느 곳에서나 제대로 작동합니다. –

관련 문제