watercolor
watercolor

Reputation: 1

Spring Boot 3 Session Clustering Error Deployed on External Tomcat10

I use Spring Boot 3.x and an external Tomcat 10. Set up session clustering on an external Tomcat If I check on the jsp page, the session is shared, but If I check the same logic with spring boot service, the session is not being shared. If I check with jsp, it seems to be shared, so session clustering between external Tomcats is not possible. It seems like it's set up, but why can't it be shared in Spring Boot? SpringBootServletInitializer has already been implemented.

I am testing with two different Tomcat ports locally on Windows. Distributable="true" is set in Context.

@GetMapping("/session-test")
public String sessionTest(HttpSession session, Model model) {

   log.info("sessionTest  enter ");

    String sessionId = session.getId();
    Integer counter = (Integer) session.getAttribute("counter");
    if (counter == null) {
        counter = 1;
    } else {
        counter++;
    }
    session.setAttribute("counter", counter);

    model.addAttribute("sessionId", sessionId);
    model.addAttribute("counter", counter);

    return "web/sessionTest"; 
}

Two Spring Boot servers want their sessions to be shared ...

server.xml of 1

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
      
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
            <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Manager className="org.apache.catalina.ha.session.DeltaManager"
               expireSessionsOnShutdown="false"
               notifyListenersOnReplication="true"/>
                <Receiver 
                    address="127.0.0.1" 
                    port="3200" 
                    autoBind="100" 
                    selectorTimeout="5000"
                    maxThreads="6" 
                    className="org.apache.catalina.tribes.transport.nio.NioReceiver"/>

                <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                    <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
                </Sender>

                
                <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor"/>
                <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
                
                
                <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
                    <Member className="org.apache.catalina.tribes.membership.StaticMember" 
                            host="127.0.0.1" 
                            port="3201" 
                            uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}"/>
                </Interceptor>

                <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
            </Channel>

            <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"/>
            <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>

  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="ROOT" distributable="true"/>
    <!-- SingleSignOn valve, share authentication between web applications
         Documentation at: /docs/config/valve.html -->
    <!--
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    -->

    <!-- Access log processes all example.
         Documentation at: /docs/config/valve.html
         Note: The pattern used is equivalent to using pattern="common" -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

  </Host>

server.xml of 2

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
            <Manager className="org.apache.catalina.ha.session.DeltaManager"
               expireSessionsOnShutdown="false"
               notifyListenersOnReplication="true"/>
            <Channel className="org.apache.catalina.tribes.group.GroupChannel">
                
                <Receiver 
                    address="127.0.0.1" 
                    port="3201" 
                    autoBind="100" 
                    selectorTimeout="5000"
                    maxThreads="6" 
                    className="org.apache.catalina.tribes.transport.nio.NioReceiver"/>

                <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                    <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
                </Sender>

                
                <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor"/>
                <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
                
                
                <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
                    <Member className="org.apache.catalina.tribes.membership.StaticMember" 
                            host="127.0.0.1" 
                            port="3200" 
                            uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17}"/>
                </Interceptor>

                <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
            </Channel>

            <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"/>
            <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>
        
        <Host name="localhost"  appBase="webapps"  unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="ROOT" distributable="true"/>

Upvotes: 0

Views: 46

Answers (1)

watercolor
watercolor

Reputation: 1

I handled it like this...... I don't know why I have to do this.

<Context>
    <Manager className="org.apache.catalina.ha.session.DeltaManager"/>
</Context>

Upvotes: 0

Related Questions