- PR -

セッションに登録したコネクションオブジェクトの接続プールへの返却方法について

投稿者投稿内容
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2003-09-01 20:38
引用:

別に良い理由を逆に教えてください。



EUC-JPでもShift_JIS(今のところは)でもX0201カナは普通に表現できます。
普通に表現できるものを「使わない方がよい」とおっしゃる以上何か
理由があるのだと思って伺ったわけです。

ISO-2022-JPではX0201カナを使用しないと明記されており(RFC1468)、
それ故電子メールでは半角カナを使用すべきでないというのは理解していますが、
たとえばここのようにEUC-JPで書かれていることが明示されたWEBページに
X0201カナが現れることは特におかしいと思いません。まぁ、僕は使いませんが。

いやぁ、あまりに話題がずれましたね。失礼しました。
kito
ベテラン
会議室デビュー日: 2003/03/24
投稿数: 59
お住まい・勤務地: Osaka
投稿日時: 2003-09-01 20:53
引用:

忍者鳥取県さんの書き込み (2003-09-01 17:20) より:
 な・・なんと!!! 
 スレッドの題目に書いていた内容が!! 
 解決しました!!! (・_・、)(感涙)


おそらく全く解決していないです。

各Sessionそれぞれにつき別々にHttpSessionBindingListenerインスタンスが
生成されているという前提で書かれていますが、
どこにもそんな保証は無いです。
(むしろServletインスタンスのように、複数のセッションの
イベントを一つのHttpSessionBindingListenerインスタンスで
受け持つというのが自然な実装のような気がします)

また、仮に各Sessionにそれぞれ別のHttpSessionBindingListenerインスタンスが
割り当てられていたとしても、皆さんが指摘しておられる「SessionにConnectionを
格納することの問題点」がすべてそのまま当てはまります。

引用:

 あと、みなさまの意見で大半をしめたのが一回一回select文を投げると
 いうことでしが、その場合、ページングの途中でデータが挿入された際に
 ページングの整合性がおかしくなってしまうと思いますが、その場合の解決法
 はあるのでしょうか?私も、この方法でやろーとしましたが、上司に
 「整合性がとれてないので ダメ」といわれてしまいました・・トホホ
 なにか情報がありましたらご教授ください。



>あと、みなさまの意見で大半をしめたのが一回一回select文を投げると

幾つかある選択肢のうちの一つである、とも書きましたよね。それは理解していらっしゃるものとして、、、

これはこれで大きな話題なので新しいスレッド(記事)として
要件を整理して投稿されると良いと思いますよ。実現方法はいろいろあります。
なかなか興味深い話題です。皆さんからいろいろな意見を聞くことができるでしょう(^^)


[ メッセージ編集済み 編集者: kito 編集日時 2003-09-01 21:08 ]
kito
ベテラン
会議室デビュー日: 2003/03/24
投稿数: 59
お住まい・勤務地: Osaka
投稿日時: 2003-09-01 21:36
引用:

kitoさんの書き込み (2003-09-01 20:53) より:
各Sessionそれぞれにつき別々にHttpSessionBindingListenerインスタンスが
生成されているという前提で書かれていますが、
どこにもそんな保証は無いです。


あ〜すみません。HttpSessionListenerと混同してました。
HttpSessionBindingListenerはSessionに格納するObjectに
implementsするものなんですね。

まぁ、それでも茨の道に違いありません(^^;
(少し言い換え)
仮にこれでConnectionをうまく管理できたとしても、
皆さんが指摘しておられる「SessionにConnectionを格納することの問題点」が
すべてそのまま当てはまります。

結局のところ、何の問題解決にもならないことになります。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-09-02 01:08

引用:

たとえば何百万件のデータをセッションに保持することになった場合
結果をセッションに登録すると相当リソースを消費してしまうような気がする
のですが、、そのWebアプリケーションを使用する人間が数人程度だったら
問題ないかもしれませんが、、、。
たしかにコーディング自体は楽でいいですよね。実をいうと私自身も最初そのような
コーディングをしていました。(・_・;)>ポリポリ



一画面コッキリの表示でよければ、sessionをつかわずに
requestを使うこともできます。

パフォーマンスに関してはSQLそのもののチューニングが必要な場合、
実行計画を出し、INDEXをはる or SQLを直す です。

WEBアプリで何百万件も扱う表示が必要ですか?
WEBの基本は 小さなトランザクション、大きなトランザクション量です。
忍者鳥取県
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 61
お住まい・勤務地: リオネジャネイロの地下6000Km
投稿日時: 2003-09-02 09:38
引用:

Ken-Labさんの書き込み (2003-09-01 20:35) より:

ところで、忍者鳥取県様のソースは本当にその問題は解決できているのでしょうか?
もう1点質問がありまして、グローバル変数をここに使って問題ありませんか?
(同時アクセス者がいた場合、変数の値が書き換わってしまうことがないかどうかが心配。
その可能性がなければOKですが)。



下記ソースは、前回のせたソースを呼び出すStrutsのアクションクラスですが

 SessionData data;
 data = new SessionData();
 hs.setAttribute("data",data);

の部分でセッションごとに SessionDataのオブジェクトを作成しています。
このため、このグローバル変数は各々のセッションでしか参照されません。
ちょっとこの部分のソースを前回載せていなかったので誤解が生じたのかも
しれません・・・m(_ _)mペコリンコ
もし static変数でコネクション等を宣言していれば、スレッドセーフに
なるように設計しないといけないですよね。

public class KensakuAction extends Action {

public ActionForward execute(ActionMapping mapping,
                ActionForm form,                                HttpServletRequest request,
HttpServletResponse response) {

HttpSession hs = request.getSession(true);

---------------<省略>---------------

SessionData data;
data = new SessionData();
hs.setAttribute("data",data);

String target = "success";
return (mapping.findForward(target));
}
}


[ メッセージ編集済み 編集者: 忍者鳥取県 編集日時 2003-09-02 09:40 ]
忍者鳥取県
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 61
お住まい・勤務地: リオネジャネイロの地下6000Km
投稿日時: 2003-09-02 10:02
引用:

kitoさんの書き込み (2003-09-01 21:36) より:

まぁ、それでも茨の道に違いありません(^^;
(少し言い換え)
仮にこれでConnectionをうまく管理できたとしても、
皆さんが指摘しておられる「SessionにConnectionを格納することの問題点」が
すべてそのまま当てはまります。
結局のところ、何の問題解決にもならないことになります。



 **** kitoさんに質問 ****

 kitoさんのおっしゃる、

 『皆さんが指摘しておられる「SessionにConnectionを格納することの問題点」』

 とは、なにを指しているんでしょうか?
 このレスをみて再度このスレッドの投稿を読み返しましたが、
 コネクションをセッションに登録することの問題点として

 『コネクションの管理がちゃんとできるのか?』

 といったことが挙げられていたと思います。

 今回のコーディングでこの問題も
 クリアできていると理解しているのですが・・・・。
 ほかにどのような問題がありますか?
 スレッドのはじめのほうにも書きましたが、
 この業界での経験が浅いので、何分ほかのひとの
 意見をよく理解できていないのかもしれません・・・。
 結局のところ、何がどう解決していないのでしょうか?
 具体的に教えてください。宜しくお願いします。





[ メッセージ編集済み 編集者: 忍者鳥取県 編集日時 2003-09-02 10:34 ]
忍者鳥取県
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 61
お住まい・勤務地: リオネジャネイロの地下6000Km
投稿日時: 2003-09-02 10:17
引用:

takuさんの書き込み (2003-08-28 16:53) より:
コーディングを間違えているというより、根本的におかしくないですか?
コネクションをセッションに登録して使いまわしちゃいけませんよ。
コネクションプーリングへのコネクションの返却って、
各リクエスト毎に行うものですよ。
クライアントアプリケーションなら、
DBの接続はアプリケーションが終了するまで、
接続を維持したままで問題ありませんが、
WEBアプリケーションでそんなことをして大丈夫だと思われますか?



えー 以前にWebアプリケーションでコネクションを
セッションに登録して使ってはいけないのはなぜかと伺いましたが
いまだに takuさんよりご回答頂けてないんですけど・・・・(^^ ;)
うーん 具体的な理由教えていただけないでしょうかねー?




[ メッセージ編集済み 編集者: 忍者鳥取県 編集日時 2003-09-02 10:42 ]
たーぞう
ぬし
会議室デビュー日: 2003/08/08
投稿数: 317
お住まい・勤務地: お花畑
投稿日時: 2003-09-02 10:42
コネクションの最大数は設定により決められるわけで、その数を超えて同時にDBに接続することはできません。したがって、一度つかんだコネクションは、不要になった時点で速やかに解放した方が、より多くのユーザがそのアプリケーションを使用でき得るわけです。

一般的に、
(リクエストオブジェクトの生存時間)<(セッションオブジェクトの生存時間)
なので、コネクションはリクエスト単位で使用した方がそのアプリケーションの可用性がより高くなります。

スキルアップ/キャリアアップ(JOB@IT)