[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00720] Re: Servlet でのデータベース接続の不具合について



------------------------- infoseek ML Sponsor --------------------------
■■■■■■■■ キャッシングならキャッシュワン ■■■■■■■■■
┏━━┓┏1.入会金・年会費・ATM手数料一切不要!━━━━━━━━┓
<特徴>┃2.実質年率15.0〜18.0% 1万円からのキャッシング    ┃
┗━━┛┗3.【今なら5万円商品券も当る!10月1日〜11月30日まで 】━┛
東京三菱キャッシュワン ⇒ http://www.p-advg.com/?bid=11321 
------------------------------------------------------------------------


森口です。

abe@xxxxxxxxxxxxxxx (阿部勇二) wrote:

> 今までの内容では伝えてなかったのですが、"destroyメソッド"を用いて
> ブラウザがクローズされた時点でコネクションを切るようにしていました。
> 常に表示しておく画面であるため、長時間のコネクション解放に繋がって
>いるかもしれません。

多分Servlet/JSPの入門書には載っていると思いますが、
destroy() は、ブラウザが閉じられたときではなくて、Servletが破棄される
ときに呼ばれます。要するに、ほとんど呼ばれることはありません。
同じように、init()は一度しか実行されません。
(init()とdestory()が対応します。)

更に、Servletに同時アクセスがあったときには一つのConnectionが同時に
使われてしまいます。
#もしかしたらMySQLはトランザクションがないので影響が少ないかも

もう一つ、ブラウザが同じ画面をずっと開いていたとしても、
サーバーがリクエストを処理する(DB接続が必要な)のは最初の一瞬だけです。


> ところで、今回の問題を解決することができました。
> MySQLの場合、Servletクラスをメモリにロードしてから8時間以上稼動すると
>DBへの再接続をせずに
> 処理を行ってしまう仕様なのだそうです。
> http://www.mysql.com/doc/en/Gone_away.html

なるほどこれは知りませんでした。勉強になります。

ですが、こんな難しいことを知らなくても、普通に接続/切断していれば、
問題は起こらないと思います、
たまたまMySQLは「切れていたら再接続」してくれるのかもしれませんが、
そんな親切なJDBCドライバばかりとも限りませんし(^^;
※接続コストが気になる場合は、別の層でConnectionPoolingを利用します。

では。

---
MORIGUCHI Hirokazu <kito@xxxxxxxxx>


------------------------------------------------------------------------
         ★年収200万アップも夢じゃない?!
 http://job.www.infoseek.co.jp/JobTop?pg=job_top.html&sv=SJ&svx=971122