2016-06-28 2 views
0

여기에 서블릿을 기반으로하는 응용 프로그램이 있으며 문제가 있습니다. 다음과 같은 일이 있습니다. 오라클 시간 초과 후 (업무가 끝나고 집에 돌아가서 응용 프로그램에 로그인하려고하는 경우와 같이) 다음과 같은 많은 오류 및 예외가 발생합니다. 연결이 끊어지고 닫힌 문 등 .세션이 종료 된 후 JDBC를 Oracle에 다시 연결할 수 없음

이 오류를 시뮬레이트하는 방법은 admin으로 oracle 세션에 액세스하고 사용 중에 세션을 종료하는 것입니다. 이렇게하면 같은 문제가 발생합니다.

우리가 할 우리는 (받는다는 설정) 다른 모든 모듈에 대한 전제 조건 인 시스템 PROJ라는 주요 프로젝트를 가지고 있고, 우리는 바람둥이에 모든.war 파일을 배포한다.

문제는 Tomcat을 다시 시작하면 해결됩니다. 그처럼 간단합니다.

내 질문 톰캣를 다시 시작없이이 연결 을 다시 어떤 방법이 입니다입니까? 또는 Tomcat을 다시 시작하거나 (또는 ​​.war을 자동으로 다시로드하는 경우) 필요한 경우이를 수행 할 수있는 방법이 있습니까?

어디에서 내가 틀린 지 알 수 없습니다.

답변

1

귀하의 설명에서 나는 당신이 데이터베이스 풀을 사용하고 있다고 생각합니다. 연결 풀은 미리 생성 된 DB 연결 묶음으로 사용되며 여러 요청을 처리하는 데 다시 사용됩니다. 유휴 시간 동안 데이터베이스 연결은 데이터베이스 서버에서 시간 초과되며 유효하지 않게되므로 오랜 시간 동안 사용하지 않으면 오류가 발생합니다. Tomcat을 재시작하면 연결 풀에서 새 연결을 다시 작성하여 문제를 해결할 수 있습니다.

데이터베이스 풀을 사용하는 경우 연결이 x 분 동안 활용되지 않으면 무작위 쿼리 (예 : 'Oracle에서 탭 수를 선택하십시오')와 같이 데이터베이스를 핑 (ping) 할 수 있습니다. x는 데이터베이스의 유휴 연결 시간 종료 시간보다 짧아야합니다.

다른 간단한 해결책은 데이터베이스 연결을 열고 DB 작업을 수행 한 다음 데이터베이스 풀을 사용하는 대신 DB 연결을 닫는 것입니다. 연결은 필요에 따라 생성되므로 시간 초과 문제는 없습니다. 이것은 간단한 해결책이지만 새로운 연결을 얻는 데 약간의 오버 헤드가 생길 수 있으므로 실행 가능한 솔루션이 아닐 수도 있습니다.

관련 문제