5

tomcat の liferay でセッション レプリケーションを有効にしようとしていますが、うまくいきません。セッションがレプリケートされているかどうかを確認するための小さなテストを作成し、webapps/examples の下に配置した別の JSP ファイルでうまく機能しますが、liferay-portlet に同じコードを入力すると、JSESSION のみが正しいです。

   HttpSession httpSession = request.getSession();
   String testTime = (String) httpSession.getAttribute("testTime");
   String before = testTime;

   testTime = Long.toString(System.currentTimeMillis());
   httpSession.setAttribute("testTime", testTime);

   String sessionid = httpSession.getId();
   System.out.println("JSESSIONID:    "+sessionid);
   System.out.println("TEST TIME WAS: "+before);
   System.out.println("TEST TIME IS:  "+testTime);

liferay-portlet で機能しない理由を知っている人はいますか? portlet/WEB-INF/web.xml に配布可能ファイルを追加しました

編集 1: バージョン

liferay 6.1.1
Tomcat 7.0.47

編集 2: 別のテストを試しました。

   HttpSession httpSession = request.getSession();
   String testTime = (String) httpSession.getAttribute("testTime");
   String before = testTime;

   if(testTime == null) {
       testTime = Long.toString(System.currentTimeMillis());
       httpSession.setAttribute("testTime", testTime);
   }

   String sessionid = httpSession.getId();
   System.out.println("JSESSIONID:    "+sessionid);
   System.out.println("TEST TIME WAS: "+before);
   System.out.println("TEST TIME IS:  "+testTime);

今回はnullの場合にのみ変数を設定します。また、liferay の外部の JSP では期待どおりに動作しますが、liferay 内では次のようになります。

  1. リクエストを取得する最初のサーバーがnullを取得し、変数を設定します
  2. 他のサーバーがリクエストを取得すると、それも null になり、変数が設定されます
  3. 最初のリクエストを受け取ったサーバーが変数を取得しようとすると、2 番目のサーバーから値が取得されます。そのため、現在は複製されています。

とにかく、どのサーバーが最初のリクエストを取得しても、常に同じ結果になることは問題ではありません

編集 4.クラスター情報

ノード: 2 ロードバランサ:

    <Proxy balancer://mycluster>
            BalancerMember ajp://node1:8009 route=tomcat1 loadfactor=1
            BalancerMember ajp://node2:8009 route=tomcat2 loadfactor=1

            Order Deny,Allow
            Deny from none
            Allow from all

            ProxySet lbmethod=byrequests
    </Proxy>
    <Location /balancer-manager>
            SetHandler balancer-manager
            Order deny,allow
            Allow from all
    </Location>

    ProxyPass /balancer-manager !
    ProxyPass / balancer://mycluster/

portal-ext.properties

cluster.link.enabled=true
jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://dbserver:3306/lportal?autoReconnect&autoReconnectForPools;&useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
jdbc.default.username=u jdbc.default.password=p

spring.configs=\
        META-INF/base-spring.xml,\
        \
        META-INF/hibernate-spring.xml,\
        META-INF/infrastructure-spring.xml,\
        META-INF/management-spring.xml,\
        \
        META-INF/util-spring.xml,\
        \
        META-INF/jpa-spring.xml,\
        \
        META-INF/executor-spring.xml,\
        \
        META-INF/audit-spring.xml,\
        META-INF/cluster-spring.xml,\
        META-INF/editor-spring.xml,\
        META-INF/jcr-spring.xml,\
        META-INF/ldap-spring.xml,\
        META-INF/messaging-core-spring.xml,\
        META-INF/messaging-misc-spring.xml,\
        META-INF/mobile-device-spring.xml,\
        META-INF/notifications-spring.xml,\
        META-INF/poller-spring.xml,\
        META-INF/rules-spring.xml,\
        META-INF/scheduler-spring.xml,\
        META-INF/scripting-spring.xml,\
        META-INF/search-spring.xml,\
        META-INF/workflow-spring.xml,\
        \
        META-INF/counter-spring.xml,\
        META-INF/mail-spring.xml,\
        META-INF/portal-spring.xml,\
        META-INF/portlet-container-spring.xml,\
        META-INF/staging-spring.xml,\
        META-INF/virtual-layouts-spring.xml,\
        \
        META-INF/dynamic-data-source-spring.xml,\
        #META-INF/shard-data-source-spring.xml,\
        #META-INF/memcached-spring.xml,\
        #META-INF/monitoring-spring.xml,\
        \
        META-INF/ext-spring.xml
4

1 に答える 1