2012-03-15 2 views
1

Connection 객체를 만들고 클래스 생성자 (DbTest)에서 jdbc 연결을 만들고 있습니다. 또 다른 자바 클래스 (RequestFilter.java)에서 다음 세션이 만료 될 때 jdbc 연결 객체 닫기

, 나는,

DbTest dbtest = new DbTest(); 
session.setAttribute("dbtest", dbtest); 

내 질문은, 연결 개체를 닫을 수있는 방법이이 객체를 초기화하고 HTTP 세션에서이 인스턴스 객체를 저장하고 그 세션이 만료 될 때 생성 되었습니까? 또는 만료되면 자동으로 폐쇄됩니까?

답변

4

HttpSessionListener을 구현할 수 있으며 sessionDestroyed() 메서드 내에서 정리를 수행 할 수 있습니다. 그러나 당신의 건축은 나를 걱정합니다. HTTP 세션에서 원시 JDBC 연결을 저장하면 안됩니다.

  • 당신은 다른 서버로 HTTP 세션을 마이그레이션 할 수 없습니다

  • 쉽게 개방형 데이터베이스 연결의 수천을 생성 할 수 있습니다

    는 HTTP 세션은 훨씬 더 가볍고

  • 시간의 99.9 % 데이터베이스 연결입니다

  • 당신은 아마 연결 시간 초과 및 기타 실패

  • 을 처리하지 않는

  • 유휴3210

연결 풀이 아닌 사용자별로 연결해야하는 이유는 무엇입니까?

+0

를 본다. Plz이 게시물의 댓글 섹션에서 충분히 추가 할 수 없었기 때문에 다음 링크에서 정교하게 내 질문을 참조하십시오. http://stackoverflow.com/questions/9723270/making-jdbc-connection-and-storing-in-session –

0

HttpSessionBindingListener를 구현할 수 있습니다.

+0

'HttpSessionBindingListener' : * 객체가 세션에 바인드되거나 언 바운드 될 때 객체가 통지되도록합니다. OP는 세션이 만료 될 때 * 통보 받기를 원합니다 *. 'HttpSessionListener'가 더 나은 선택입니다. –

+0

오브젝트가 세션에 바인드되거나 바인드 해제 될 때 오브젝트가 통지되도록합니다. 객체는 HttpSessionBindingEvent 객체에 의해 통지됩니다. 이것은 서블릿 프로그래머가 세션이 무효화되거나 세션 시간 초과로 인해 세션에서 속성을 명시 적으로 바인딩 해제 한 결과 일 수 있습니다. 나는 – cjstehno

0

연결 개체를 명시 적으로 닫아야합니다. finalize 메소드에서 컬렉션을 닫을 수는 있지만 finalize가 호출되지 않을 수도 있으므로 권장하지 않습니다. 더 나은 접근법은이 연결을 명시 적으로 닫을 메소드를 작성하고 호출하는 것입니다. 생성자에서 JDBC 연결을 만드는 것도 권장되지 않습니다.

0

연결 풀 관리 또한 문제가 될 수 있습니다. 연결 풀에서 연결을 얻으려면 동기화를 사용해야합니다. 그러면 다른 스레드 (클라이언트)가 연결 풀에 액세스하지 못하게됩니다.

관련 문제