1

基本的に私は:

CONNECTION_POOL = new BoneCP(config);

そして直後:

CONNECTION_POOL.getConnection().createStatement("SELECT * FROM myTable");

時々 (常にではありません) をスローしorg.apache.derby.iapi.error.ShutdownExceptionます。BoneCP とそのインスタンス化にある種の競合状態またはスレッド化の問題があると思われますが、どこにも何も見つかりません。遅延インスタンス化について何か見たことがありますが、それを true または false に設定しても違いはありません。

どんな助けでも大歓迎です。

4

2 に答える 2

0

Thread.interrupt を呼び出すと、derby がシャットダウンする場合があります。Derby ガイドを引用すると、「原則として、Thread.interrupt() 呼び出しを使用して、データベースにもアクセスしている待機中の可能性のあるスレッドにシグナルを送信しないでください。これは、Derby が割り込みをキャッチしてデータベースへの接続を閉じる可能性があるためです。wait と notify を使用してください。代わりに呼び出します。」

一部のライブラリは Thread.interrupt などを呼び出すため、これは実際には悪いことです。また、場合によっては、何をしているのかによっては、それが良い習慣になることもあります。私の意見では、これはデータベース エンジンの大きな設計上の欠陥です。

いずれにせよ、私が見つけた唯一の解決策は、Thread.interrupt() を呼び出す場合、これらのスレッドの割り込みを無視するように Derby ソース コードを調整する必要があるということでした。具体的にnoteAndClearInterrupt(...)は、クラスのメソッドorg.apache.derby.iapi.util.InterruptStatus

于 2013-10-09T04:52:08.060 に答える