[Seasar-user:21707] Re: Tomcatでのセッションレプリケーション実装方法について

Hiroyuki Ohnaka [E-MAIL ADDRESS DELETED]
2013年 9月 3日 (火) 17:22:41 JST


大中です。

Tomcatのセッションレプリケーションはデフォルトがリクエストに対して非同期のため、
TeedaのようなPageの処理の後リダイレクトするのが原則なフレームワークの場合、
リダイレクトした後にリクエスト先のtomcatに(レプリケーションがまだ終わっていないため)
セッション情報がとどかず、セッションの状態に不整合が起きる可能性があります。
(自分が経験したのはTeedaでないフレームワークのため、あくまで可能性ですが...)

これを避ける確実な方法は、スティッキーセッションを併用して、セッションレプリケーションは
サーバーに障害が起きた場合の保険および、デプロイ時のセッション継続の手段として
使う、ということになります。




2013年9月3日 14:35 西村一昭 <k-nishimura @ ts.cnt.dnes.jp.nec.com>:

> お世話になっております。
> 西村と申します。
>
> Tomcatでのセッションレプリケーションの実装方法についてお伺いします。
>
> 現在、
> WEB(Apache)×3 - LB - AP(Tomcat)×2 - DB(MySQL)×1
> の構成でTomcatでのセッションレプリケーションの実装を検討しています。
>
> 過去のMLを参考に下記のような実装を行おうと考えているのですが、
> 何か過不足がありましたらご指摘をお願いします。
>
>
> 1.Tomcatの設定
> ・Tomcatのserver.xmlの<Cluster>タグのコメントアウトを解除し、有効にする
> ・<Cluster>タグの<Valve className="〜.ReplicationValve"/>の除外対象から「.*\.html」を削除する
>
> 2.アプリの設定
> ・web.xmlに「<distributable/>」を追記する
> ・htmlで「<te:include>」を使用している箇所やForm部品にid属性を設定し、「name="_idXX"」が付与されないようにする
>  ※「<te:include>」以外に注意が必要な個所はありますか?
> ・FilterやIntercepterで明示的にHttpSession#setAttribute()を行う
> インターセプタへの実装案:
>     public class SessionSetAttributeInterceptor extends
> AbstractInterceptor {
>
>         /** シリアルバージョンUID */
>         private static final long serialVersionUID = 1L;
>
>         /**
>          * インタセプタのポイントカット時に呼び出されるメソッド
>          */
>         public Object invoke(MethodInvocation methodInvocation) throws
> Throwable {
>
>             Object ret = methodInvocation.proceed();
>
>             HttpSession httpSession =
> SingletonS2Container.getComponent("session");
>
>             // ユーザ情報Dto
>             Object objUserInfoDto =
> httpSession.getAttribute("userInfoDto");
>             httpSession.setAttribute("userInfoDto", objUserInfoDto);
>
>             //TODO その他セッション格納Dto
>
>             // Teeda Extension
>             Object objPageScope =
> httpSession.getAttribute(javax.faces.internal.scope.PageScope.class.getName());
>
> httpSession.setAttribute(javax.faces.internal.scope.PageScope.class.getName(),
> objPageScope);
>
>             Object objSubApplicationScope =
> httpSession.getAttribute(javax.faces.internal.scope.SubApplicationScope.class.getName());
>
> httpSession.setAttribute(javax.faces.internal.scope.SubApplicationScope.class.getName(),
> objSubApplicationScope);
>
>             Object objRedirectScope =
> httpSession.getAttribute(javax.faces.internal.scope.RedirectScope.class.getName());
>
> httpSession.setAttribute(javax.faces.internal.scope.RedirectScope.class.getName(),
> objRedirectScope);
>
>             return ret;
>         }
>     }
>
> システム構成:
> ・Redhat-Linux ES release 4
> ・Apache2.0.52
> ・jdk1.5.0.9
> ・Tomcat 6.0.35
> ・s2-framework 2.4.24
> ・Teeda 1.0.13-sp6
> ・MySQL 5.0.27
>
> 参考にしたML:
> ・[Seasar-user:11433]
> ・[Seasar-user:17881]
> ・[Seasar-user:21674]
>
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20130903/4c8d7efa/attachment.html>


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