[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