Session Clustering With TomEE
See Hazelcast VP Miko Matsumura describe the Web Session Clustering Use Case
Apache TomEE has everything Tomcat has but with more enterprise technologies. Both are derived from the same open source project and community.
Apache TomEE achieved Java EE 6 Web Profile certification, making it a powerful yet lightweight app server, without all the rarely used extra bells and whistles. Tomitribe’s mission is to support the growth of TomEE and our engineers who have been a part of the community since TomEE was just a dream.
Hazelcast is partnered with TomiTribe, the dedicated Apache TomEE support company.
There’s already a proof of concept implementation and we are working closely with TomiTribe to develop an official integration.
TomEE is vanilla Tomcat with the following “bonus” features.
The Web Profile version of TomEE contains
- CDI – Apache OpenWebBeans
- EJB – Apache OpenEJB
- JPA – Apache OpenJPA
- JSF – Apache MyFaces
- JSP – Apache Tomcat
- JSTL – Apache Tomcat
- JTA – Apache Geronimo Transaction
- Servlet – Apache Tomcat
- Javamail – Apache Geronimo JavaMail
- Bean Validation – Apache BVal
The TomEE Plus distribution adds the following:
- JAX-RS – Apache CXF
- JAX-WS – Apache CXF
- JMS – Apache ActiveMQ
- Connector – Apache Geronimo Connector
Web Session Clustering
This is a great way to ensure that session information is maintained when you are clustering web servers. You can also use a similar pattern for managing user identities. Learn how easy it is to maintain session state across a set of servers here!
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:
- Target application or web server should support Java 1.5+
- Target application or web server should support Servlet 2.4+ spec
- Session objects that needs to be clustered have to be Serializable
Here are the steps to setup Hazelcast Session Clustering:
Put the hazelcast and hazelcast-wm jars in your WEB-INF/lib directory.
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>
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.