
初めて質問させていただきます。
現在、C/S系のシステム開発で、プログラミング言語はJavaサーブレットを、データベースはDB2を使用してWeb画面を使用したシステム開発を行っています。
Javaサーブレットで、JDBC-ODBCを使用してデータベースへ接続するように、また切断の際もプログラムの中で切断できるようにプログラミングをしているのですが、Web画面のブラウザにある×マークで画面を閉じてもデータベースの接続は切断されるのでしょうか?
色んなサイトを探し回ったのですが、良い資料がありませんでした。
お分かりの方がいらしたら、是非ご教授お願い致します。
No.1ベストアンサー
- 回答日時:
globe8さん、こんにちは。
Javaのデータベース・コネクションは明示的なクローズがない場合、そのコネクションのインスタンスがガーベジ・コレクション(どの変数からも参照されなくなった領域を自動的に解放する仕組み)で回収される際に、自動的にクローズされるものとされています。
よって、そのデータベース・コネクションを表す java.sql.Connection のインスタンスが有効期限をどこで迎えるかがポイントです。
有効期限を迎えるポイントとして多々ありますが、大きく分けて、以下の2つになると思います。
1.Javaの実行環境が終了したとき。
サーブレットですと、webサーバー(より正確に言えば、サーブレット・コンテナ)の終了/停止処理を行ったときになると思います。
2.参照し始めたメソッドが終了したとき。
たとえば、doPostメソッドやdoGetメソッド内で参照(新たにnewしたなど)場合、そのメソッドが終了すれば、有効期限を迎えます。doPost/doGetメソッドでレスポンスが完了したときはもちろん、処理途中に例外が発生して終了したときも、ガーベジ・コレクションの対象になります。
ただし、HTTPセッションに登録したり、staticフィールドに代入したり、また、お使いのシステムがコネクションを一定期間プールするものであったりすれば、それらが途切れる瞬間まで有効期限が延びてしまいます。
よって、通常、正常に動作している範囲では、クライアント・ブラウザが閉じられても、コネクションはクローズされるはずです。
ここで重要なことは、あくまで有効期限が迎えても、ガーベジ・コレクションの対象になるだけで、すぐに回収される分けではありません。あくまで、実行環境の動作次第になります。
もうひとつ、回収されれば自動的にクローズされるのがJavaの仕様ですが、実行環境に不具合があれば、その時点でアウトです。
あるいは、Javaは良くても、通信の手違いなどで、、サーブレットがあるマシンは切断した扱いでも、DBサーバーがコネクト中の扱いのままになることも考えられます。
以上、不明瞭な部分があるかとは思いますが、参考になればと思います。
nisikitさん、こんにちは。globe8です。
データベースの切断についてのご回答、どうも有難うございました。
大変ご丁寧な回答でしたので、凄く参考になりました。
まだWEBシステムの開発に就いて半年弱でまだ難しい部分が沢山あり、データベースの切断について困っていたので本当に助かりました。
是非参考にさせて頂こうと思います。
改めて御礼を申し上げます。有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
復旧中のデータベースについて
-
DATファイルをEXCELで開きたい
-
【DB】同じトランザクション内...
-
SQL Server Management Studio ...
-
TPSとは・・・
-
accessの処理が遅い
-
VSAM,QSAM,BSAM,BPAM,BDAM
-
一つのテーブルだけを復元(リス...
-
MS-Accessのエクスポートで異常...
-
mdfファイルの残骸について
-
tempdb の適切なサイズ
-
dbFailOnError とは?
-
Accessdでの「トランザクション...
-
復元に異常に時間がかかる
-
データベースのアタッチができ...
-
OracleのROWIDについて…
-
アタッチができない
-
データベース復元時に指定する...
-
SQL Server 2000の物理ファイル...
-
SQL2008から2000へデータコピー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
復旧中のデータベースについて
-
32ビット版Officeで作成64ビッ...
-
SQLServer2005メンテナンスプラ...
-
UDBログとは何のことでしょう
-
PostgreSQL? PostgresSQL? なん...
-
SQL インジェクションは PQexec...
-
SQLの実行と発行は同じ意味...
-
SQLServerのDB(テーブル?)が...
-
iPhoneでPostgreSQLとの連携
-
文字コードについて
-
データのエクスポート&インポ...
-
警察はスマホに保存した動画や...
-
【DB】同じトランザクション内...
-
DATファイルをEXCELで開きたい
-
postgresql についてです
-
エクセルのフィルタ抽出が固まる
-
一つのテーブルだけを復元(リス...
-
復元に異常に時間がかかる
-
マスタメンテとは?
-
Accessdでの「トランザクション...
おすすめ情報