0

Tomcat と webapps のログに不可解なエラーがあります。Java Web アプリケーションは Tomcat 6 で実行され、Oracle 11g データベースを使用します。すべてのリクエストが記録されます。データベース接続プーリングには Commons DBCP を使用します。このアプリケーションの特徴の 1 つは、すべての接続がリクエスト スコープであることです。これを Spring の SmartDataSource で実装しました。接続の解放は try/finally でラップされているため、リクエスト中にエラーが発生しても、接続は解放されます。これは、テスト中ずっとうまく機能します。

ある日、サーバーがエラー 503「サービスを利用できません」を返しました。ログには、例外が 1 つだけ見つかりましorg.apache.commons.dbcp.AbandonedTrace$AbandonedObjectExceptionた。そのため、Common DBCP 放棄された接続コレクターが放棄された接続を見つけて報告したようです。それ自体はエラーではなく、エラーが別の場所にあることを示唆しています。

トレースは、接続が取得されたときの正確な時刻とコードを示しています。ログでその時間を調べたところ、開始されたが終了しなかったリクエストがありました。これで接続が解放されなかった理由が説明できますが、気になるのは、try/finally がどのように突然切断されたのかということです。

アプリケーションログに他の例外がなく、サーバーが返したエラーコードが通常のエラー500「内部サーバーエラー」ではなかったため、これはTomcatの問題だと思います。

なぜこれが起こる可能性があるのか​​ 誰にも提案がありますか? Tomcat がスレッドを中断して、try/finally が無視される可能性はありますか?

4

0 に答える 0