You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kf...@apache.org on 2014/04/03 08:53:52 UTC

svn commit: r1584268 - in /tomcat/trunk: java/org/apache/catalina/ha/session/ClusterManagerBase.java java/org/apache/catalina/ha/session/DeltaManager.java java/org/apache/catalina/ha/session/DeltaSession.java webapps/docs/changelog.xml

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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org