• ベストアンサー

データベースの切断について

初めて質問させていただきます。 現在、C/S系のシステム開発で、プログラミング言語はJavaサーブレットを、データベースはDB2を使用してWeb画面を使用したシステム開発を行っています。 Javaサーブレットで、JDBC-ODBCを使用してデータベースへ接続するように、また切断の際もプログラムの中で切断できるようにプログラミングをしているのですが、Web画面のブラウザにある×マークで画面を閉じてもデータベースの接続は切断されるのでしょうか? 色んなサイトを探し回ったのですが、良い資料がありませんでした。 お分かりの方がいらしたら、是非ご教授お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#3852
noname#3852
回答No.1

globe8さん、こんにちは。  Javaのデータベース・コネクションは明示的なクローズがない場合、そのコネクションのインスタンスがガーベジ・コレクション(どの変数からも参照されなくなった領域を自動的に解放する仕組み)で回収される際に、自動的にクローズされるものとされています。  よって、そのデータベース・コネクションを表す java.sql.Connection のインスタンスが有効期限をどこで迎えるかがポイントです。 有効期限を迎えるポイントとして多々ありますが、大きく分けて、以下の2つになると思います。 1.Javaの実行環境が終了したとき。  サーブレットですと、webサーバー(より正確に言えば、サーブレット・コンテナ)の終了/停止処理を行ったときになると思います。 2.参照し始めたメソッドが終了したとき。  たとえば、doPostメソッドやdoGetメソッド内で参照(新たにnewしたなど)場合、そのメソッドが終了すれば、有効期限を迎えます。doPost/doGetメソッドでレスポンスが完了したときはもちろん、処理途中に例外が発生して終了したときも、ガーベジ・コレクションの対象になります。  ただし、HTTPセッションに登録したり、staticフィールドに代入したり、また、お使いのシステムがコネクションを一定期間プールするものであったりすれば、それらが途切れる瞬間まで有効期限が延びてしまいます。 よって、通常、正常に動作している範囲では、クライアント・ブラウザが閉じられても、コネクションはクローズされるはずです。 ここで重要なことは、あくまで有効期限が迎えても、ガーベジ・コレクションの対象になるだけで、すぐに回収される分けではありません。あくまで、実行環境の動作次第になります。 もうひとつ、回収されれば自動的にクローズされるのがJavaの仕様ですが、実行環境に不具合があれば、その時点でアウトです。 あるいは、Javaは良くても、通信の手違いなどで、、サーブレットがあるマシンは切断した扱いでも、DBサーバーがコネクト中の扱いのままになることも考えられます。 以上、不明瞭な部分があるかとは思いますが、参考になればと思います。

globe8
質問者

お礼

nisikitさん、こんにちは。globe8です。 データベースの切断についてのご回答、どうも有難うございました。 大変ご丁寧な回答でしたので、凄く参考になりました。 まだWEBシステムの開発に就いて半年弱でまだ難しい部分が沢山あり、データベースの切断について困っていたので本当に助かりました。 是非参考にさせて頂こうと思います。 改めて御礼を申し上げます。有難うございました。

すると、全ての回答が全文表示されます。

関連するQ&A