Author: kfujino Date: Thu Apr 3 06:53:51 2014 New Revision: 1584268 URL: http://svn.apache.org/r1584268 Log: Add support for cross context session replication to BackupManager.
Modified: tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java?rev=1584268&r1=1584267&r2=1584268&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java Thu Apr 3 06:53:51 2014 @@ -21,14 +21,22 @@ import java.io.IOException; import java.util.regex.Pattern; import org.apache.catalina.Context; +import org.apache.catalina.LifecycleException; import org.apache.catalina.Loader; +import org.apache.catalina.Valve; +import org.apache.catalina.core.StandardContext; import org.apache.catalina.ha.CatalinaCluster; import org.apache.catalina.ha.ClusterManager; +import org.apache.catalina.ha.tcp.ReplicationValve; import org.apache.catalina.session.ManagerBase; import org.apache.catalina.tribes.io.ReplicationStream; +import org.apache.juli.logging.Log; +import org.apache.juli.logging.LogFactory; public abstract class ClusterManagerBase extends ManagerBase implements ClusterManager { + private final Log log = LogFactory.getLog(ClusterManagerBase.class); + /** * A reference to the cluster */ @@ -53,6 +61,11 @@ public abstract class ClusterManagerBase */ private Pattern sessionAttributePattern = null; + /** + * cached replication valve cluster container! + */ + private volatile ReplicationValve replicationValve = null ; + /* * @see org.apache.catalina.ha.ClusterManager#getCluster() */ @@ -189,4 +202,39 @@ public abstract class ClusterManagerBase copy.setSecureRandomAlgorithm(getSecureRandomAlgorithm()); } + /** + * Register cross context session at replication valve thread local + * @param session cross context session + */ + protected void registerSessionAtReplicationValve(DeltaSession session) { + if(replicationValve == null) { + Context context = getContext(); + if(context instanceof StandardContext && + ((StandardContext)context).getCrossContext()) { + CatalinaCluster cluster = getCluster() ; + if(cluster != null) { + Valve[] valves = cluster.getValves(); + if(valves != null && valves.length > 0) { + for(int i=0; replicationValve == null && i < valves.length ; i++ ){ + if(valves[i] instanceof ReplicationValve) replicationValve = + (ReplicationValve)valves[i] ; + }//for + + if(replicationValve == null && log.isDebugEnabled()) { + log.debug("no ReplicationValve found for CrossContext Support"); + }//endif + }//end if + }//endif + }//end if + }//end if + if(replicationValve != null) { + replicationValve.registerReplicationSession(session); + } + } + + @Override + protected void stopInternal() throws LifecycleException { + replicationValve = null; + super.stopInternal(); + } } Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java?rev=1584268&r1=1584267&r2=1584268&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java Thu Apr 3 06:53:51 2014 @@ -33,12 +33,9 @@ import org.apache.catalina.Host; import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleState; import org.apache.catalina.Session; -import org.apache.catalina.Valve; -import org.apache.catalina.core.StandardContext; import org.apache.catalina.ha.CatalinaCluster; import org.apache.catalina.ha.ClusterManager; import org.apache.catalina.ha.ClusterMessage; -import org.apache.catalina.ha.tcp.ReplicationValve; import org.apache.catalina.session.ManagerBase; import org.apache.catalina.tribes.Member; import org.apache.catalina.tribes.io.ReplicationStream; @@ -79,11 +76,6 @@ public class DeltaManager extends Cluste protected static final String managerName = "DeltaManager"; protected String name = null; - /** - * cached replication valve cluster container! - */ - private volatile ReplicationValve replicationValve = null ; - private boolean expireSessionsOnShutdown = false; private boolean notifySessionListenersOnReplication = true; private boolean notifyContainerListenersOnReplication = true; @@ -845,36 +837,6 @@ public class DeltaManager extends Cluste } /** - * Register cross context session at replication valve thread local - * @param session cross context session - */ - protected void registerSessionAtReplicationValve(DeltaSession session) { - if(replicationValve == null) { - Context context = getContext(); - if(context instanceof StandardContext && - ((StandardContext)context).getCrossContext()) { - CatalinaCluster cluster = getCluster() ; - if(cluster != null) { - Valve[] valves = cluster.getValves(); - if(valves != null && valves.length > 0) { - for(int i=0; replicationValve == null && i < valves.length ; i++ ){ - if(valves[i] instanceof ReplicationValve) replicationValve = - (ReplicationValve)valves[i] ; - }//for - - if(replicationValve == null && log.isDebugEnabled()) { - log.debug("no ReplicationValve found for CrossContext Support"); - }//endif - }//end if - }//endif - }//end if - }//end if - if(replicationValve != null) { - replicationValve.registerReplicationSession(session); - } - } - - /** * Find the master of the session state * @return master member of sessions */ @@ -969,7 +931,6 @@ public class DeltaManager extends Cluste // Require a new random number generator if we are restarted getCluster().removeManager(this); super.stopInternal(); - replicationValve = null; } // -------------------------------------------------------- Replication Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java?rev=1584268&r1=1584267&r2=1584268&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java Thu Apr 3 06:53:51 2014 @@ -410,8 +410,8 @@ public class DeltaSession extends Standa @Override public void endAccess() { super.endAccess() ; - if(manager instanceof DeltaManager) { - ((DeltaManager)manager).registerSessionAtReplicationValve(this); + if(manager instanceof ClusterManagerBase) { + ((ClusterManagerBase)manager).registerSessionAtReplicationValve(this); } } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1584268&r1=1584267&r2=1584268&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Thu Apr 3 06:53:51 2014 @@ -99,6 +99,10 @@ Remove cluster and replicationValve from cluster manager template. These instance are not necessary to template. (kfujino) </fix> + <fix> + Add support for cross context session replication to + <code>org.apache.catalina.ha.session.BackupManager</code>. (kfujino) + </fix> </changelog> </subsection> <subsection name="Web applications"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org