[Seasar-user:21676] Re: Seasar2のセッションレプリケーションの方法

nemoto [E-MAIL ADDRESS DELETED]
2013年 7月 19日 (金) 19:26:47 JST


小林様

ご返信ありがとうございます。

ServletFilterを追加し、使われた変数名記録機能付きの
HttpSessionを返すようなServletRequestを渡せば
対策可能ということかと思います。

そうすればアプリ本体のコード変更は基本的にないはずですし、
影響を最小限にとどめられそうです。

よく知られたテクニックなのかもしれないですが、
存じ上げませんでした。ありがとうございます!


(2013/07/19 17:30), Koichi Kobayashi wrote:
> 小林 (koichik) です.
> 
> 4 年経っているとはいえ、Tomcat のセッション
> レプリケーションを使っていて、[Seasar-user:17892] と
> 同じ Tomcat6 を使ってるなら、結果も同じでしょう。
> 
> 大きな影響を与えることなく対策するなら、
> ServletFilter を作って HttpSession のラッパーを
> 作り、getAttribute() された名前を記録しておいて、
> 抜ける手前で setAttribute() を呼び出す、とか。
> 
> 
> On Fri, 19 Jul 2013 12:03:34 +0900, nemoto <nemoto.kiyotaka @ nitech.ac.jp> wrote:
> 
>> 名古屋工業大学の根本と申します。
>> セッションレプリケーションの方法についてお尋ねします。
>> 過去に同一事例と思われるメーリングリストのやりとりを見付けたのですが、
>> 4年ほど経過しているので重複になりましたらご容赦ください。
>>
>> Seasar2アプリをパフォーマンスの問題からアプリケーションサーバーを
>> 1台から2台に増やし、WEB×1、APP×2、DB×1 のクラスタリング構成にする
>> 設定を行っております。STICKYSESSIONを設定してすでに運用を開始しており、
>> 加えてセッションレプリケーションを行おうとしているのですが、
>> 実機テストでセッション情報の同期がされないことがわかりました。
>> (接続中のTomcatを停止し、次のアクセスでもう一方の稼働中のTomcatに
>> 振られたとき、必ずログアウトする。)
>>
>> Tomcatのセッションレプリケーション機能の使用、
>> セッション変数DTOの存在、対策として示されているsetAttributeを
>> ひとまずログイン情報保持のDTOに適用したところ、一方のTomcatを
>> 停止してもログインが維持されるようになったことから、
>> [Seasar-user:17892]と[Seasar-user:17923]の同一事例と考えております。
>>
>> ここでは (1)DTOのプロパティ変更の都度、HttpSession#setAttribute()で
>> 明示的に同期する (2)DBセッションレプリケーションを使用する
>> の2つの対策が示されているのですが、セッション変数DTOは20個ほどあり、
>> 修正ミスが起こりやすいと思います。またDBを新たに追加するのも
>> サーバー構成の変更となり、できるだけ避けたいものです。
>> 現時点でも上記の2つの対策から選ぶしかないのでしょうか。
>> 修正量と修正ミスの起こりにくさから、最適と思われる方法を
>> お尋ねしたいと思います。
>>
>> 動作環境は以下の通りです。
>>
>> ・CentOS 6.2 (64bit)
>> ・Apache 2.2.15 (AJP接続)
>> ・Java 1.6.0_30-b12
>> ・Tomcat 6.0.35
>> ・s2-framework 2.4.43
>> ・Teeda 1.0.13-sp10
>> ・MySQL 5.1.52
>> ・[ENV]product, [DEPLOY MODE]Cool Deploy
>>
>> 以上、よろしくお願いいたします。
>> _______________________________________________
>> Seasar-user mailing list
>> Seasar-user @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/seasar-user
> 
> 



Seasar-user メーリングリストの案内