org.apache.catalina.cluster.session
Class JvmRouteBinderValve

java.lang.Object
  extended byorg.apache.catalina.valves.ValveBase
      extended byorg.apache.catalina.cluster.session.JvmRouteBinderValve
All Implemented Interfaces:
Contained, Lifecycle, javax.management.MBeanRegistration, Valve

public class JvmRouteBinderValve
extends ValveBase
implements Lifecycle

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 JvmRouteSessionIDBinderListener with JvmRouteSessionIDBinderListenerLifecycle Add this Valve to your clustered application or setup it to context default conf/enginename/hostname/context.xml.default for all host application

 
                    <Context>
                      <Valve className="org.apache.catalina.cluster.session.JvmRouteBinderValve" />  
                    </Context>
  
 

Version:
1.0
Author:
Peter Rossbach

Field Summary
protected  CatalinaCluster cluster
          the cluster
protected  boolean enabled
          enabled this component
protected static java.lang.String info
          The descriptive information about this implementation.
protected  LifecycleSupport lifecycle
          The lifecycle event support for this component.
static org.apache.commons.logging.Log log
           
protected  Manager manager
          Session Manager for and app manager
protected  boolean managerCheck
          is manager a distrbuted
protected  long numberOfSessions
          number of session that no at this tomcat instanz hosted
protected  java.lang.String sessionIdAttribute
           
protected  StringManager sm
          The string manager for this package.
protected  boolean started
          Has this component been started yet?
 
Fields inherited from class org.apache.catalina.valves.ValveBase
container, controller, domain, mserver, next, oname
 
Fields inherited from interface org.apache.catalina.Lifecycle
AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, DESTROY_EVENT, INIT_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT
 
Constructor Summary
JvmRouteBinderValve()
           
 
Method Summary
 void addLifecycleListener(LifecycleListener listener)
          Add a lifecycle event listener to this component.
protected  void changeSessionID(java.lang.String sessionId, Request request, Response response, java.lang.String newSessionID, Session catalinaSession)
          change session id and send to all cluster nodes
 LifecycleListener[] findLifecycleListeners()
          Get the lifecycle listeners associated with this lifecycle.
 boolean getEnabled()
           
 java.lang.String getInfo()
          Return descriptive information about this implementation.
protected  java.lang.String getLocalJvmRoute()
          get jvmroute from engine
protected  Manager getManager()
          get Cluster DeltaManager
 long getNumberOfSessions()
           
 java.lang.String getSessionIdAttribute()
          set session id attribute to failed node for request.
protected  void handleJvmRoute(java.lang.String sessionId, java.lang.String localJvmRoute, Request request, Response response)
          Handle jvmRoute stickyness after tomcat instance failed.
protected  void handlePossibleTurnover(Request request, Response response)
          handle possible session turn over.
 void invoke(Request request, Response response)
          Detect possible the JVMRoute change at cluster backup node..
 void removeLifecycleListener(LifecycleListener listener)
          Remove a lifecycle event listener from this component.
protected  void sendSessionIDClusterBackup(java.lang.String sessionId, java.lang.String newSessionID)
          Send the changed Sessionid to all clusternodes.
 void setEnabled(boolean enabled)
           
protected  void setNewSessionCookie(java.lang.String sessionId, Request request, Response response)
          Sets a new cookie for the given session id and response and see {@link org.apache.catalina.connector.Request#configureSessionCookie(javax.servlet.http.Cookie)
 void setSessionIdAttribute(java.lang.String sessionIdAttribute)
          get name of failed reqeust session attribute
 void start()
          Prepare for the beginning of active use of the public methods of this component.
 void stop()
          Gracefully terminate the active use of the public methods of this component.
 
Methods inherited from class org.apache.catalina.valves.ValveBase
backgroundProcess, createObjectName, getContainer, getContainerName, getController, getDomain, getNext, getObjectName, getParentName, postDeregister, postRegister, preDeregister, preRegister, setContainer, setController, setNext, setObjectName
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

public static org.apache.commons.logging.Log log

info

protected static final java.lang.String info
The descriptive information about this implementation.

See Also:
Constant Field Values

cluster

protected CatalinaCluster cluster
the cluster


manager

protected Manager manager
Session Manager for and app manager


managerCheck

protected boolean managerCheck
is manager a distrbuted


sm

protected StringManager sm
The string manager for this package.


started

protected boolean started
Has this component been started yet?


enabled

protected boolean enabled
enabled this component


numberOfSessions

protected long numberOfSessions
number of session that no at this tomcat instanz hosted


sessionIdAttribute

protected java.lang.String sessionIdAttribute

lifecycle

protected LifecycleSupport lifecycle
The lifecycle event support for this component.

Constructor Detail

JvmRouteBinderValve

public JvmRouteBinderValve()
Method Detail

getInfo

public java.lang.String getInfo()
Return descriptive information about this implementation.

Specified by:
getInfo in interface Valve
Overrides:
getInfo in class ValveBase

getSessionIdAttribute

public java.lang.String getSessionIdAttribute()
set session id attribute to failed node for request.

Returns:
Returns the sessionIdAttribute.

setSessionIdAttribute

public void setSessionIdAttribute(java.lang.String sessionIdAttribute)
get name of failed reqeust session attribute

Parameters:
sessionIdAttribute - The sessionIdAttribute to set.

getNumberOfSessions

public long getNumberOfSessions()
Returns:
Returns the numberOfSessions.

getEnabled

public boolean getEnabled()
Returns:
Returns the enabled.

setEnabled

public void setEnabled(boolean enabled)
Parameters:
enabled - The enabled to set.

invoke

public void invoke(Request request,
                   Response response)
            throws java.io.IOException,
                   javax.servlet.ServletException
Detect possible the JVMRoute change at cluster backup node..

Specified by:
invoke in interface Valve
Specified by:
invoke in class ValveBase
Parameters:
request - tomcat request being processed
response - tomcat response being processed
Throws:
java.io.IOException - if an input/output error has occurred
javax.servlet.ServletException - if a servlet error has occurred

handlePossibleTurnover

protected void handlePossibleTurnover(Request request,
                                      Response response)
handle possible session turn over.

Parameters:
request -
response -
See Also:
handleJvmRoute(String, String, Request, Response)

getLocalJvmRoute

protected java.lang.String getLocalJvmRoute()
get jvmroute from engine

Returns:

getManager

protected Manager getManager()
get Cluster DeltaManager

Returns:

handleJvmRoute

protected void handleJvmRoute(java.lang.String sessionId,
                              java.lang.String localJvmRoute,
                              Request request,
                              Response response)
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.

Parameters:
sessionId - request SessionID from Cookie
localJvmRoute - local jvmRoute
response - Tomcat Response

changeSessionID

protected void changeSessionID(java.lang.String sessionId,
                               Request request,
                               Response response,
                               java.lang.String newSessionID,
                               Session catalinaSession)
change session id and send to all cluster nodes

Parameters:
sessionId - original session id
request -
response -
newSessionID - new session id for node migration
catalinaSession - current session with original session id

sendSessionIDClusterBackup

protected void sendSessionIDClusterBackup(java.lang.String sessionId,
                                          java.lang.String newSessionID)
Send the changed Sessionid to all clusternodes.

Parameters:
sessionId - current failed sessionid
newSessionID - new session id, bind to the new cluster node
See Also:
JvmRouteSessionIDBinderListener.messageReceived(ClusterMessage)

setNewSessionCookie

protected void setNewSessionCookie(java.lang.String sessionId,
                                   Request request,
                                   Response response)
Sets a new cookie for the given session id and response and see {@link org.apache.catalina.connector.Request#configureSessionCookie(javax.servlet.http.Cookie)

Parameters:
sessionId - The session id
response - Tomcat Response

addLifecycleListener

public void addLifecycleListener(LifecycleListener listener)
Add a lifecycle event listener to this component.

Specified by:
addLifecycleListener in interface Lifecycle
Parameters:
listener - The listener to add

findLifecycleListeners

public LifecycleListener[] findLifecycleListeners()
Get the lifecycle listeners associated with this lifecycle. If this Lifecycle has no listeners registered, a zero-length array is returned.

Specified by:
findLifecycleListeners in interface Lifecycle

removeLifecycleListener

public void removeLifecycleListener(LifecycleListener listener)
Remove a lifecycle event listener from this component.

Specified by:
removeLifecycleListener in interface Lifecycle
Parameters:
listener - The listener to add

start

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.

Specified by:
start in interface Lifecycle
Throws:
LifecycleException - if this component detects a fatal error that prevents this component from being used

stop

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.

Specified by:
stop in interface Lifecycle
Throws:
LifecycleException - if this component detects a fatal error that needs to be reported


Copyright © 2000-2005 Apache Software Foundation. All Rights Reserved.