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

西村一昭 [E-MAIL ADDRESS DELETED]
2013年 9月 3日 (火) 14:35:09 JST


お世話になっております。
西村と申します。

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 メーリングリストの案内