アプリケーションがアクティブな接続を閉じずにクラッシュまたは終了した場合、Java JRE はデータベース接続を閉じますか? そうでない場合、これらの接続をタイムアウトするのはデータベースの責任ですか?
Java がクラッシュした場合、他に何もすることがないため、データベースは開いているすべての接続をタイムアウトにする必要があることを理解しています。
編集 追加の考え。Tomcat にデプロイされた WAR がクラッシュした場合、Tomcat サーバーは開いている接続をクリーンアップしますか?
アプリケーションがアクティブな接続を閉じずにクラッシュまたは終了した場合、Java JRE はデータベース接続を閉じますか? そうでない場合、これらの接続をタイムアウトするのはデータベースの責任ですか?
Java がクラッシュした場合、他に何もすることがないため、データベースは開いているすべての接続をタイムアウトにする必要があることを理解しています。
編集 追加の考え。Tomcat にデプロイされた WAR がクラッシュした場合、Tomcat サーバーは開いている接続をクリーンアップしますか?
それは本当に依存します。
JRE 自体がクラッシュした場合、すべての接続を閉じることができない可能性があります。アプリケーションがクラッシュした場合、リソースを解放するときに接続を閉じることができる場合があります。私の経験では、JRE自体が死なない限り、これはほとんどの場合に当てはまります。もちろん、最善の防御策は、適切なエラー処理と、必要以上の接続を開かないようにすることです。
私の経験から言えば、Tomcat でデータ ソースを設定したほうがよいでしょう。そうすれば、アプリケーションがクラッシュしても、開いているリソースの問題にはなりません。私は、アプリケーション サーバーにできるだけ多くのリソース管理を処理させるのがかなり好きです。そうすることで、冒険的なコードからもう少し保護されます。
ほとんどの場合、アプリケーションは適切なエラー ハンドラで接続を閉じる必要があります。Ewald が述べたように、Tomcat でデータ ソースをセットアップすることを好みます。そこで、接続の最大数とタイムアウトを定義できますcontext.xml。アプリケーションがスタックする接続が多すぎると、接続が解放されます。