0

データベースにアクセスするために、swing アプリケーションで c3p0 を使用して休止状態を使用しています。c3p0 は で構成されていc3p0.testConnectionOnCheckout=trueます。したがって、データベースが接続を切断した場合 (たとえばタイムアウト後に)、c3p0 が新しい接続を確立します。

正常に動作しますが、DB にアクセスできない場合、c3p0 は GUI をしばらくフリーズし、colsole に次のメッセージを出力します。

26.06.2013 11:42:46,568 WARN [ThreadPoolAsynchronousRunner run] com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@27d8f985 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
26.06.2013 11:42:46,573 WARN [ThreadPoolAsynchronousRunner run] com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@27d8f985 -- APPARENT DEADLOCK!!! Complete Status:
        Managed Threads: 3
        Active Threads: 3
        Active Tasks:
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1636d880 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2)
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@6abfc6e4 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@549ad97c (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)
        Pending Tasks:
                com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask@23c8749
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@53d5cac4
Pool thread stack traces:
        Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,6,main]
                java.lang.Thread.sleep(Native Method)
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)
                com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
        Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,6,main]
                java.lang.Thread.sleep(Native Method)
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)
                com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
        Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,6,main]
                java.lang.Thread.sleep(Native Method)
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)
                com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

そして、約 7 秒後に例外org.hibernate.exception.GenericJDBCException: Could not open connectionがスローされます。この間ずっと GUI がブロックされています。私が実際にやりたいことは、「接続が失われました、再接続しようとしています」などの適切なメッセージとともに進行状況バー (不確定) を表示することです。どうすればそれを達成できますか?c3p0 には、このようなものに対するいくつかのコールバックがあるのではないでしょうか?

4

0 に答える 0