私のアプリケーションでは、Springはデータベースアクセス用の接続プールを管理します。 Hibernateは、これらの接続をそのクエリに使用します。一見すると、プールには問題はありません。これは、同時接続のクライアントと1つの接続のみを持つプールで正しく動作します。私は多くのクエリを実行することができるので、私は(または春)オープンな接続を残していないと思う。非アクティブ時に接続がハングアップする
私の問題は、しばらく時間がないと表示されます(時には30分、時には2時間以上)。そして、Hibernateが検索を行うと、それはあまりにも多く持続します。 log4jレベルをTRACEに設定すると、ログが取得されます。
...
18:27:01 DEBUG nsactionSynchronizationManager - Retrieved value [[email protected]] for key [[email protected]] bound to thread [http-8080-Processor24]
18:27:01 DEBUG HibernateTransactionManager - Found thread-bound Session [[email protected]] for Hibernate transaction
18:27:01 DEBUG HibernateTransactionManager - Using transaction object [org.springframework.orm.hi[email protected]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 [[email protected]]
18:27:01 TRACE SessionImpl - setting flush mode to: AUTO
18:27:01 DEBUG JDBCTransaction - begin
18:27:01 DEBUG ConnectionManager - opening JDBC connection
ここで約2〜10分間凍結します。しかし、次に続行します:
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 [[email protected]] for key [[email protected]] to thread [http-8080-Processor24]
18:30:11 DEBUG nsactionSynchronizationManager - Initializing transaction synchronization
...
その後、別の非アクティブ期間まで問題なく動作します。 IMHO、それは接続プールが無効な/閉じられた接続を返すように思え、Hibernateがそれを認識すると、プールへの別の接続を尋ねます。
私は、この問題やそれを区切るためにできることをどのように解決できるのか分かりません。これを達成するための助けに感謝します。
ありがとうございました。
編集:まあ、それは最終的にファイアウォールのルールのためです。データベースは接続が失われたことを検出しますが、プール(dbcpまたはc3p0)は失われていません。したがって、成功なしでデータベースに照会しようとします。まだ私にとって奇妙なのは、タイムアウト期間が非常に可変であるということです。おそらく、ルールが異常に奇妙であるか、ファイアウォールが正しく機能しない可能性があります。とにかく、私はそのマシンにアクセスできず、説明を待つだけです。 :(
これがファイアウォールの問題であるかどうかをどのように特定しましたか?私は似たような問題に直面しています。dbcpはSpringバッチトランザクションで無期限にハングし、戻ってくることはありません。 – YogendraJ