初めて質問させていただきます。
現在、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で質問しましょう!
似たような質問が見つかりました
- JavaScript Typescript が必要な理由 1 2023/01/07 11:45
- ソフトウェア データベースのウェブでの自作 2 2023/08/01 10:06
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- IT・エンジニアリング バックエンドエンジニアに転職 2 2022/04/07 00:51
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Outlook(アウトルック) OCN WEBメールについて 1 2022/05/18 23:33
- MySQL 「utf8mb4_general_ci」はMAMPでは何に当たりますか? 1 2022/06/02 07:45
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- システム 古いWEBシステム。もう追加プログラムは作れない? それともできる? 6 2022/06/08 13:41
- 固定IP 楽天光が繋がらないまたは接続に時間が掛かる IPv4が邪魔してるので削除したい 2 2022/08/15 11:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
復旧中のデータベースについて
-
データのエクスポート&インポ...
-
9時間の時間のずれ
-
【DB】同じトランザクション内...
-
DATファイルをEXCELで開きたい
-
警察はスマホに保存した動画や...
-
postgresql についてです
-
PCが悪くなって新しいPCにSSMS...
-
Accessdでの「トランザクション...
-
accessの処理が遅い
-
一つのトランザクションでSELEC...
-
TPSとは・・・
-
エクセルのフィルタ抽出が固まる
-
期限切れのバックアップの削除
-
SQLServer2012の復元ができない
-
ファイルとDBの違い
-
SQLサーバのデータ保存先
-
SQLServer2000でのトランザクシ...
-
富士通のオフコンの事でお聞き...
-
ADO Connection を再利用する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
復旧中のデータベースについて
-
32ビット版Officeで作成64ビッ...
-
SQLServerのDB(テーブル?)が...
-
SQLServer2005メンテナンスプラ...
-
UDBログとは何のことでしょう
-
iPhoneでPostgreSQLとの連携
-
アクセスVBAのSQLについて
-
ARCserveで教えてください
-
SQLiteのデータベースの互換性
-
DBサーバの立て方
-
SQLサーバー2000のデータベ...
-
9時間の時間のずれ
-
SQLserverのデータベースの作成...
-
ファイルサーバはシーケンシャ...
-
SQLの実行と発行は同じ意味...
-
MicrosoftOutlook-ExchangeServ...
-
アクセスのコピーや改造をされ...
-
質問
-
Windows版のフリーの組込みDB
-
【DB】同じトランザクション内...
おすすめ情報