c3p0 ComboPooledDataSource を使用してデータベース接続を (Oracle 10g データベースに) プールしています。データベース接続の停止の処理に問題があります。
最初の接続の取得時にデータベースへの接続がない場合、チェックアウト タイムアウトが発生し、期待どおりに失敗します。
ただし、1 つ以上の接続が取得され、すでに接続プールにある後に接続の停止が発生した場合、getConnection() の呼び出しは単にハングします。例外はスローされません。これは、プールされた接続を使用しようとしているが、その接続が機能していないためだと思います。
使用する前に接続が有効かどうかを確認する方法はありますか? testConnectionOnCheckout=true を設定してみましたが、効果がないようです。
これはスレッドダンプです
C3P0PooledConnectionPoolManager[identityToken->2rvy8f8x1oujxrx1majv5s|be41d5]- HelperThread-#2" daemon prio=6 tid=0x0307a800 nid=0x840 in Object.wait() [0x03d1f000] java.lang.Thread.State: TIMED_WAITING (オブジェクト モニター上) at java .lang.Object.wait(Native Method) - com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:635) で <0x28387f88> (com.mchange.v2.async.ThreadPoolAsynchronousRunner) を待機中 -ロックされた <0x28387f88> (com.mchange.v2.async.ThreadPoolAsynchronousRunner)
ロックされた所有可能なシンクロナイザー: - なし