OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 暇なときにでも
  • 質問No.159979
  • 閲覧数218
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 93% (62/66)

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

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

  • 回答No.1

globe8さん、こんにちは。
 Javaのデータベース・コネクションは明示的なクローズがない場合、そのコネクションのインスタンスがガーベジ・コレクション(どの変数からも参照されなくなった領域を自動的に解放する仕組み)で回収される際に、自動的にクローズされるものとされています。
 よって、そのデータベース・コネクションを表す java.sql.Connection のインスタンスが有効期限をどこで迎えるかがポイントです。

有効期限を迎えるポイントとして多々ありますが、大きく分けて、以下の2つになると思います。
1.Javaの実行環境が終了したとき。
 サーブレットですと、webサーバー(より正確に言えば、サーブレット・コンテナ)の終了/停止処理を行ったときになると思います。

2.参照し始めたメソッドが終了したとき。
 たとえば、doPostメソッドやdoGetメソッド内で参照(新たにnewしたなど)場合、そのメソッドが終了すれば、有効期限を迎えます。doPost/doGetメソッドでレスポンスが完了したときはもちろん、処理途中に例外が発生して終了したときも、ガーベジ・コレクションの対象になります。
 ただし、HTTPセッションに登録したり、staticフィールドに代入したり、また、お使いのシステムがコネクションを一定期間プールするものであったりすれば、それらが途切れる瞬間まで有効期限が延びてしまいます。

よって、通常、正常に動作している範囲では、クライアント・ブラウザが閉じられても、コネクションはクローズされるはずです。

ここで重要なことは、あくまで有効期限が迎えても、ガーベジ・コレクションの対象になるだけで、すぐに回収される分けではありません。あくまで、実行環境の動作次第になります。
もうひとつ、回収されれば自動的にクローズされるのがJavaの仕様ですが、実行環境に不具合があれば、その時点でアウトです。
あるいは、Javaは良くても、通信の手違いなどで、、サーブレットがあるマシンは切断した扱いでも、DBサーバーがコネクト中の扱いのままになることも考えられます。

以上、不明瞭な部分があるかとは思いますが、参考になればと思います。
お礼コメント
globe8

お礼率 93% (62/66)

nisikitさん、こんにちは。globe8です。
データベースの切断についてのご回答、どうも有難うございました。
大変ご丁寧な回答でしたので、凄く参考になりました。
まだWEBシステムの開発に就いて半年弱でまだ難しい部分が沢山あり、データベースの切断について困っていたので本当に助かりました。
是非参考にさせて頂こうと思います。
改めて御礼を申し上げます。有難うございました。
投稿日時 - 2001-10-30 22:03:50
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ