Save This Page
Home » apache-tomcat-6.0.16-src » org.apache » catalina » cluster » session » [javadoc | source]
org.apache.catalina.cluster.session
public class: JvmRouteBinderValve [javadoc | source]
java.lang.Object
   org.apache.catalina.valves.ValveBase
      org.apache.catalina.cluster.session.JvmRouteBinderValve

All Implemented Interfaces:
    ClusterValve, Lifecycle, Valve, MBeanRegistration, Contained

Valve to handle Tomcat jvmRoute takeover using mod_jk module after node failure. After a node crashed the next request going to other cluster node. Now the answering from apache is slower ( make some error handshaking. Very bad with apache at my windows.). We rewrite now the cookie jsessionid information to the backup cluster node. After the next response all client request goes direct to the backup node. The change sessionid send also to all other cluster nodes. Well, now the session stickyness work directly to the backup node and traffic don't go back too restarted cluster nodes! At all cluster node you must configure the as ClusterListener since 5.5.10 JvmRouteSessionIDBinderListener or before with org.apache.catalina.cluster.session.JvmRouteSessionIDBinderListenerLifecycle. Add this Valve to your host definition at conf/server.xml . Since 5.5.10 as direct cluster valve:
<Cluster>
<Valve className="org.apache.catalina.cluster.session.JvmRouteBinderValve" />
</Cluster>

Before 5.5.10 as Host element:
<Hostr>
<Valve className="org.apache.catalina.cluster.session.JvmRouteBinderValve" />
</Hostr>
Trick:
You can enable this mod_jk turnover mode via JMX before you drop a node to all backup nodes! Set enable true on all JvmRouteBinderValve backups, disable worker at mod_jk and then drop node and restart it! Then enable mod_jk Worker and disable JvmRouteBinderValves again. This use case means that only requested session are migrated.
Field Summary
public static  Log log     
protected static final  String info    The descriptive information about this implementation. 
protected  CatalinaCluster cluster    the cluster 
protected  StringManager sm    The string manager for this package. 
protected  boolean started    Has this component been started yet? 
protected  boolean enabled    enabled this component 
protected  long numberOfSessions    number of session that no at this tomcat instanz hosted 
protected  String sessionIdAttribute     
protected  LifecycleSupport lifecycle    The lifecycle event support for this component. 
Fields inherited from org.apache.catalina.valves.ValveBase:
container,  containerLog,  info,  next,  sm,  domain,  oname,  mserver,  controller
Method from org.apache.catalina.cluster.session.JvmRouteBinderValve Summary:
addLifecycleListener,   changeSessionID,   findLifecycleListeners,   getCluster,   getEnabled,   getInfo,   getLocalJvmRoute,   getManager,   getNumberOfSessions,   getSessionIdAttribute,   handleJvmRoute,   handlePossibleTurnover,   invoke,   removeLifecycleListener,   sendSessionIDClusterBackup,   setCluster,   setEnabled,   setNewSessionCookie,   setSessionIdAttribute,   start,   stop
Methods from org.apache.catalina.valves.ValveBase:
backgroundProcess,   createObjectName,   event,   getContainer,   getContainerName,   getController,   getDomain,   getInfo,   getNext,   getObjectName,   getParentName,   invoke,   postDeregister,   postRegister,   preDeregister,   preRegister,   setContainer,   setController,   setNext,   setObjectName,   toString
Methods from java.lang.Object:
equals,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from org.apache.catalina.cluster.session.JvmRouteBinderValve Detail:
 public  void addLifecycleListener(LifecycleListener listener) 
    Add a lifecycle event listener to this component.
 protected  void changeSessionID(Request request,
    Response response,
    String sessionId,
    String newSessionID,
    Session catalinaSession) 
    change session id and send to all cluster nodes
 public LifecycleListener[] findLifecycleListeners() 
    Get the lifecycle listeners associated with this lifecycle. If this Lifecycle has no listeners registered, a zero-length array is returned.
 public CatalinaCluster getCluster() 
 public boolean getEnabled() 
 public String getInfo() 
    Return descriptive information about this implementation.
 protected String getLocalJvmRoute(Request request) 
    get jvmroute from engine
 protected Manager getManager(Request request) 
    get Cluster DeltaManager
 public long getNumberOfSessions() 
 public String getSessionIdAttribute() 
    set session id attribute to failed node for request.
 protected  void handleJvmRoute(Request request,
    Response response,
    String sessionId,
    String localJvmRoute) 
    Handle jvmRoute stickyness after tomcat instance failed. After this correction a new Cookie send to client with new jvmRoute and the SessionID change propage to the other cluster nodes.
 protected  void handlePossibleTurnover(Request request,
    Response response) 
    handle possible session turn over.
 public  void invoke(Request request,
    Response response) throws IOException, ServletException 
    Detect possible the JVMRoute change at cluster backup node..
 public  void removeLifecycleListener(LifecycleListener listener) 
    Remove a lifecycle event listener from this component.
 protected  void sendSessionIDClusterBackup(ClusterManager manager,
    Request request,
    String sessionId,
    String newSessionID) 
    Send the changed Sessionid to all clusternodes.
 public  void setCluster(CatalinaCluster cluster) 
 public  void setEnabled(boolean enabled) 
 protected  void setNewSessionCookie(Request request,
    Response response,
    String sessionId) 
 public  void setSessionIdAttribute(String sessionIdAttribute) 
    get name of failed reqeust session attribute
 public  void start() throws LifecycleException 
    Prepare for the beginning of active use of the public methods of this component. This method should be called after configure(), and before any of the public methods of the component are utilized.
 public  void stop() throws LifecycleException 
    Gracefully terminate the active use of the public methods of this component. This method should be the last one called on a given instance of this component.