Połączenie zawiesza się po czasie bezczynności

W mojej aplikacji Spring zarządza pulą połączeń w celu uzyskania dostępu do bazy danych. Hibernate używa tych połączeń do swoich zapytań. Na pierwszy rzut oka nie mam żadnych problemów z pulą: działa poprawnie z jednoczesnymi klientami i pulą z tylko jednym połączeniem. Mogę wykonać wiele zapytań, więc myślę, że ja (lub wiosna) nie zostawiam otwartych połączeń.

Mój problem pojawia się po pewnym czasie bezczynności (czasami 30 minut, czasem więcej niż 2 godziny). Następnie, gdy Hibernate wykonuje jakieś wyszukiwanie, trwa zbyt długo. Ustawienie poziomu log4j na TRACE, otrzymuję te dzienniki:

...
18:27:01 DEBUG nsactionSynchronizationManager  - Retrieved value [org.springframework.orm.hibernate3.SessionHolder@99abd7] for key [org.hibernate.impl.SessionFactoryImpl@7d2897] bound to thread [http-8080-Processor24]
18:27:01 DEBUG HibernateTransactionManager     - Found thread-bound Session [org.hibernate.impl.SessionImpl@8878cd] for Hibernate transaction
18:27:01 DEBUG HibernateTransactionManager     - Using transaction object [org.springframework.orm.hibernate3.HibernateTransactionManager$HibernateTransactionObject@1b2ffee]
18:27:01 DEBUG HibernateTransactionManager     - Creating new transaction with name [com.acjoventut.service.GenericManager.findByExample]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
18:27:01 DEBUG HibernateTransactionManager     - Preparing JDBC Connection of Hibernate Session [org.hibernate.impl.SessionImpl@8878cd]
18:27:01 TRACE SessionImpl                     - setting flush mode to: AUTO
18:27:01 DEBUG JDBCTransaction                 - begin
18:27:01 DEBUG ConnectionManager               - opening JDBC connection

Tutaj zamarza na około 2 - 10 minut. Ale potem kontynuuje:

18:30:11 DEBUG JDBCTransaction                 - current autocommit status: true
18:30:11 DEBUG JDBCTransaction                 - disabling autocommit
18:30:11 TRACE JDBCContext                     - after transaction begin
18:30:11 DEBUG HibernateTransactionManager     - Exposing Hibernate transaction as JDBC transaction [jdbc:oracle:thin:@212.31.39.50:30998:orcl, UserName=DEVELOP, Oracle JDBC driver]
18:30:11 DEBUG nsactionSynchronizationManager  - Bound value [org.springframework.jdbc.datasource.ConnectionHolder@843a9d] for key [org.apache.commons.dbcp.BasicDataSource@7745fd] to thread [http-8080-Processor24]
18:30:11 DEBUG nsactionSynchronizationManager  - Initializing transaction synchronization
...

Następnie działa bez problemów, aż do kolejnego okresu bezczynności. IMHO, wygląda na to, że pula połączeń zwraca nieprawidłowe / zamknięte połączenie, a gdy Hibernate zdaje sobie z tego sprawę, poproś inne połączenie z pulą.

Nie wiem, jak mogę rozwiązać ten problem lub rzeczy, które mogę zrobić, aby go rozgraniczyć. Każda pomoc w osiągnięciu tego będzie doceniana.

Dzięki.

EDYCJA: Cóż, w końcu było to spowodowane regułą zapory. Baza danych wykrywa utratę połączenia, ale nie puli (dbcp lub c3p0). Próbuje więc wysłać zapytanie do bazy danych bez powodzenia. Dziwne jest dla mnie to, że limit czasu jest bardzo zmienny. Może reguła jest specjalnie dziwna lub zapora nie działa poprawnie. W każdym razie nie mam dostępu do tej maszyny i mogę tylko czekać na wyjaśnienie. :(

questionAnswers(5)

yourAnswerToTheQuestion