- - PR -
セッションに登録したコネクションオブジェクトの接続プールへの返却方法について
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-08-29 09:37
忍者鳥取県です。
昨日下記のような質問を投げましたが、よくよくしらべてみると javax.servlet.http.HttpSessionBindingListenerインターフェイスで セッションタイムアウト時の終了処理valueUnboundメソッドが呼び出されて いる時点で、すでにセッション自体無効化されていました。 ゆえに、この方法は使えないみたいですね・・・・(・_・、)グスン お騒がしました。m(_ _)m ペコリンコ
| ||||||||||||
|
投稿日時: 2003-08-29 11:14
正攻法、というか一般的なデザインパターンはものの本にたくさん書いてありますのでまずはそれらを参考にすることをお勧めいたします。
JDBCでごりごりとデータを取得したいのであれば rownum を使って必要な範囲だけをフェッチして表示すれば軽くもなるし、コネクションをセッションに放りこむ必要もないかと思います。 コネクションプールの必要性につきましては色々なところで論じられています。ご参照ください。せっかくJavaを使うのですから。Strutsにも簡単なコネクションプールが実装されていますし。 | ||||||||||||
|
投稿日時: 2003-08-29 11:31
JavaScriptではウィンドウのクローズはイベントとして拾えませんので ご注意を。 これってみなさん結構苦労してると思いますよ。 結局、クライアントがWebブラウザになっているおかげでクライアントの ライフサイクルの制御に苦労するよりは、リクエストごとにプールから コネクションを借りてきてその都度SQLを投げることにしているわけです。 毎度大きなデータを取ってくるような場合にはそれこそSQLの結果を セッションに突っ込んでおいて再利用すればよいです。 | ||||||||||||
|
投稿日時: 2003-08-29 11:59
下記のようなコーディングすることにより、ウィンドウの終了時に JavaScriptを動作させることは可能です。 ウィンドウが閉じた際に、JavaScriptを用いてサーブレット等に submitを行いなんらかの処理を行わせることはできます。 <html> <head> <script language="JavaScript"> function a(){ alert('ひろえるよ!') } </script> </head> <BODY bgcolor="lightcyan" onLoad="alert('いらっしゃいまし(*^_^*)')"; onUnload="a()";> あいうえお </body> </html>
たとえば何百万件のデータをセッションに保持することになった場合 結果をセッションに登録すると相当リソースを消費してしまうような気がする のですが、、そのWebアプリケーションを使用する人間が数人程度だったら 問題ないかもしれませんが、、、。 たしかにコーディング自体は楽でいいですよね。実をいうと私自身も最初そのような コーディングをしていました。(・_・;)>ポリポリ [ メッセージ編集済み 編集者: 忍者鳥取県 編集日時 2003-08-29 12:40 ] | ||||||||||||
|
投稿日時: 2003-08-29 13:26
どうもニシトミです
unloadイベントって、ウィンドウクローズイベントなんですか そのページが切り替わるときに呼ばれるのかと思ってました。 イリーガルな、検証試験とかで、そのページをリロードとかしたら 例外出そうですけど 余計なお世話かもしれませんが scriptに頼るのって結構実装依存とかになるのでは? | ||||||||||||
|
投稿日時: 2003-08-29 13:27
うーん、まりりさんがおっしゃっていることが全く理解できてないですね。 それだけでは絶対に無理です。 それだと、画面が更新されたときも同じ動きをしてしまいます。 このために、判断するためのフラグを持たせるなどして、 ウィンドウが閉じられたかどうかを区別する必要があるんです。 そんな単純なことではないんですよ。 | ||||||||||||
|
投稿日時: 2003-08-29 13:27
ある特定の環境では意図した通りに動くかもしれませんが、 ユーザーがJavaScriptをOFFにしていたり、挙動の違う別のブラウザを使っていたり、 ブラウザのバージョンアップやパッチ当てによってJavaScriptの動作が変わったり 、、等と考えると、システムのクリティカルな部分をJavaScriptに頼る のは危険です。 (クライアントの環境を限定するのは良くありますが、それとは別の話です。)
それは設計が間違っています。 リクエストごとのConnectionの取得/返却は当然の前提としてあり、 (理由については皆さんが書かれている通りです。 Webでもこの件に関して様々な情報が得られます。) その上で、 (A) (Connectionとは切り離された)データをSessionに格納する (B) そのページでの表示に必要なデータのみを取得する という選択肢があるということです。 私は(B)の手法を使うことが多いですが、(A)が必要になるのは、 「検索そのものに時間がかかる」「DBでは不可能なソートを実現したい」 等の場合でしょう。 検索(select)で引っかかるデータ量が多いときには(A)の手法は不適切です。 コーディングの手間云々ではないです。大して変わらないと思いますし。
それをうまくこなしてくれるのがOracle等のDBMSです。 もちろん規模によりますが、最近のDBMSで通常の用途であれば 十分な速度を得られるでしょう。 小手先の技で高速化した気分になるよりも、普通に検索した方がずっと 速くて安定していることもよくあると思いますよ。 あと、いわゆる半角カナはWebでは使わない方が良いです。 [ メッセージ編集済み 編集者: kito 編集日時 2003-08-29 13:29 ] | ||||||||||||
|
投稿日時: 2003-08-29 14:59
うーん、、ようするにフラグを立てればウィンドウが閉じたことを 感知させれるのでは!?ちがうんでしょうか? (たしかに処理をJavaScriptに依存させるのは問題だと思いましたが・・) [ メッセージ編集済み 編集者: 忍者鳥取県 編集日時 2003-08-29 15:03 ] | ||||||||||||
