Chapter 8. Http Session Clustering with HazelcastWM

Say you have more than one web servers (A, B, C) with a load balancer in front of them. If server A goes down then your users on that server will be directed to one of the live servers (B or C) but their sessions will be lost! So we have to have all these sessions backed up somewhere if we don't want to lose the sessions upon server crashes. Hazelcast WM allows you to cluster user http sessions automatically. Followings are required for enabling Hazelcast Session Clustering:

Here are the steps to setup Hazelcast Session Clustering:

  1. Put the hazelcast and hazelcast-wm jars in your WEB-INF/lib directory.

  2. Put the following xml into web.xml file. Make sure Hazelcast filter is placed before all the other filters if any; put it at the top for example.

        <filter>
            <filter-name>hazelcast-filter</filter-name>
            <filter-class>com.hazelcast.web.WebFilter</filter-class>
            <!--
                Name of the distributed map storing
                your web session objects
            -->
            <init-param>
                <param-name>map-name</param-name>
                <param-value>my-sessions</param-value>
            </init-param>
            <!--
                How is your load-balancer configured?
                stick-session means all requests of a session
                is routed to the node where the session is first created.
                This is excellent for performance.
                If sticky-session is set to false, when a session is updated
                on a node, entry for this session on all other nodes is invalidated.
                You have to know how your load-balancer is configured before
                setting this parameter. Default is true.
            -->
            <init-param>
                <param-name>sticky-session</param-name>
                <param-value>true</param-value>
            </init-param>
            <!--
                Are you debugging? Default is false.
            -->
            <init-param>
                <param-name>debug</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>hazelcast-filter</filter-name>
            <url-pattern>/*</url-pattern>
            <dispatcher>FORWARD</dispatcher>
            <dispatcher>INCLUDE</dispatcher>
            <dispatcher>REQUEST</dispatcher>
        </filter-mapping>
    
        <listener>
            <listener-class>com.hazelcast.web.SessionListener</listener-class>
        </listener>
    

  3. Package and deploy your war file as you would normally do.

It is that easy! All http requests will go through Hazelcast WebFilter and it will put the session objects into Hazelcast distributed map if needed.