You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2009/09/09 15:03:05 UTC

svn commit: r812933 - in /tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster: CatalinaCluster.java ClusterValve.java session/DeltaManager.java session/SimpleTcpReplicationManager.java tcp/SimpleTcpCluster.java

Author: rjung
Date: Wed Sep  9 13:03:04 2009
New Revision: 812933

URL: http://svn.apache.org/viewvc?rev=812933&view=rev
Log:
Make deltaManager and related things more consistent with TC6:

- Interface ClusterValve now extends Valve
- Interface CatalinaCluster
  - remove removeManager(String,Manager)
  - remove addManager(String,Manager)
  - add getManagerName(String,Manager)
- Add manager base class ClusterManagerBase
- all Managers
  - switch from addManager(String, Manager) to registerManager(Manager)
  - switch from removeManager(String, Manager) to removeManager(Manager)
- SimpleTcpCluster
  - switch from addManager(String, Manager) to registerManager(Manager)
  - switch from removeManager(String, Manager) to removeManager(Manager)
- DeltaManager
  - whitespace, ugly line concatenation and comments
  - remove unused imports
  - move getClassLoaders() into ClusterManagerBase
  - remove redundant log message
  - use getClassLoaders() instead of getClassLoaders(container)

Modified:
    tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/CatalinaCluster.java
    tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/ClusterValve.java
    tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/session/DeltaManager.java
    tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java
    tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java

Modified: tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/CatalinaCluster.java
URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/CatalinaCluster.java?rev=812933&r1=812932&r2=812933&view=diff
==============================================================================
--- tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/CatalinaCluster.java (original)
+++ tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/CatalinaCluster.java Wed Sep  9 13:03:04 2009
@@ -136,8 +136,7 @@
     public Map getManagers();
 
     public Manager getManager(String name);
-    public void removeManager(String name,Manager manager);
-    public void addManager(String name,Manager manager);
+    public String getManagerName(String name, Manager manager);
     public Valve[] getValves();
 
 }

Modified: tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/ClusterValve.java
URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/ClusterValve.java?rev=812933&r1=812932&r2=812933&view=diff
==============================================================================
--- tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/ClusterValve.java (original)
+++ tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/ClusterValve.java Wed Sep  9 13:03:04 2009
@@ -16,13 +16,16 @@
  */
 package org.apache.catalina.cluster;
 
+import org.apache.catalina.Valve;
+
 /**
- * Cluster Valve Interface to mark all Cluster Valves 
- * Only those Valve can'be configured as Cluster Valves
+ * Cluster valves are a simple extension to the Tomcat valve architecture
+ * with a small addition of being able to reference the cluster component in the container it sits in.
+ * @author Filip Hanik
  * @author Peter Rossbach
  * @version $Revision$, $Date$
  */
-public interface ClusterValve {
+public interface ClusterValve extends Valve{
     /**
      * Returns the cluster the cluster deployer is associated with
      * @return CatalinaCluster

Modified: tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/session/DeltaManager.java
URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/session/DeltaManager.java?rev=812933&r1=812932&r2=812933&view=diff
==============================================================================
--- tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/session/DeltaManager.java (original)
+++ tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/session/DeltaManager.java Wed Sep  9 13:03:04 2009
@@ -18,7 +18,6 @@
 package org.apache.catalina.cluster.session;
 
 import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayInputStream;
@@ -36,16 +35,13 @@
 import org.apache.catalina.Engine;
 import org.apache.catalina.Host;
 import org.apache.catalina.Valve;
-import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.LifecycleListener;
 import org.apache.catalina.Loader;
 import org.apache.catalina.Session;
 import org.apache.catalina.cluster.CatalinaCluster;
-import org.apache.catalina.cluster.ClusterManager;
 import org.apache.catalina.cluster.ClusterMessage;
 import org.apache.catalina.cluster.Member;
-import org.apache.catalina.session.ManagerBase;
 import org.apache.catalina.cluster.tcp.ReplicationValve;
 import org.apache.catalina.util.CustomObjectInputStream;
 import org.apache.catalina.util.LifecycleSupport;
@@ -72,19 +68,15 @@
  * @version $Revision$ $Date$
  */
 
-public class DeltaManager extends ManagerBase implements Lifecycle,
-        PropertyChangeListener, ClusterManager {
+public class DeltaManager extends ClusterManagerBase{
 
     // ---------------------------------------------------- Security Classes
-
-    public static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory
-            .getLog(DeltaManager.class);
+    public static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog(DeltaManager.class);
 
     /**
      * The string manager for this package.
      */
-    protected static StringManager sm = StringManager
-            .getManager(Constants.Package);
+    protected static StringManager sm = StringManager.getManager(Constants.Package);
 
     // ----------------------------------------------------- Instance Variables
 
@@ -102,11 +94,8 @@
      * The descriptive name of this Manager implementation (for logging).
      */
     protected static String managerName = "DeltaManager";
-
     protected String name = null;
-    
     protected boolean defaultMode = false;
-
     private CatalinaCluster cluster = null;
 
     /**
@@ -123,21 +112,13 @@
      * The maximum number of active Sessions allowed, or -1 for no limit.
      */
     private int maxActiveSessions = -1;
-    
     private boolean expireSessionsOnShutdown = false;
-
     private boolean notifyListenersOnReplication = true;
-
     private boolean notifySessionListenersOnReplication = true;
-
     private boolean stateTransfered = false ;
-
     private int stateTransferTimeout = 60;
-
     private boolean sendAllSessions = true;
-
     private boolean sendClusterDomainOnly = true ;
-    
     private int sendAllSessionsSize = 1000 ;
     
     /**
@@ -155,85 +136,47 @@
      * the servlet container may invalidate a backup session from other cluster node.
      */
     private int expireTolerance = 300;
-
     private ArrayList receivedMessageQueue = new ArrayList() ;
-    
     private boolean receiverQueue = false ;
-
     private boolean stateTimestampDrop = true ;
-
     private long stateTransferCreateSendTime; 
     
     // ------------------------------------------------------------------ stats attributes
     
     int rejectedSessions = 0;
-
     private long sessionReplaceCounter = 0 ;
-
     long processingTime = 0;
-
     private long counterReceive_EVT_GET_ALL_SESSIONS = 0 ;
-
     private long counterSend_EVT_ALL_SESSION_DATA = 0 ;
-
     private long counterReceive_EVT_ALL_SESSION_DATA = 0 ;
-
     private long counterReceive_EVT_SESSION_CREATED = 0 ;
-
     private long counterReceive_EVT_SESSION_EXPIRED = 0;
-
     private long counterReceive_EVT_SESSION_ACCESSED = 0 ;
-
     private long counterReceive_EVT_SESSION_DELTA = 0;
-
     private long counterSend_EVT_GET_ALL_SESSIONS = 0 ;
-
     private long counterSend_EVT_SESSION_CREATED = 0;
-
     private long counterSend_EVT_SESSION_DELTA = 0 ;
-
     private long counterSend_EVT_SESSION_ACCESSED = 0;
-
     private long counterSend_EVT_SESSION_EXPIRED = 0;
-
     private int counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE = 0 ;
-
     private int counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE = 0 ;
-
     private int counterNoStateTransfered = 0 ;
 
 
     // ------------------------------------------------------------- Constructor
-  
     public DeltaManager() {
         super();
     }
 
     // ------------------------------------------------------------- Properties
     
-    public static ClassLoader[] getClassLoaders(Container container) {
-        Loader loader = null;
-        ClassLoader classLoader = null;
-        if (container != null) loader = container.getLoader();
-        if (loader != null) classLoader = loader.getClassLoader();
-        else classLoader = Thread.currentThread().getContextClassLoader();
-        if ( classLoader == Thread.currentThread().getContextClassLoader() ) {
-            return new ClassLoader[] {classLoader};
-        } else {
-            return new ClassLoader[] {classLoader,Thread.currentThread().getContextClassLoader()};
-        }
-    }
-
-    
     /**
      * Return descriptive information about this Manager implementation and the
      * corresponding version number, in the format
      * <code>&lt;description&gt;/&lt;version&gt;</code>.
      */
     public String getInfo() {
-
-        return (info);
-
+        return info;
     }
 
     public void setName(String name) {
@@ -244,9 +187,7 @@
      * Return the descriptive short name of this Manager implementation.
      */
     public String getName() {
-
-        return (name);
-
+        return name;
     }
 
     public int getUpdateActiveInterval() {
@@ -477,9 +418,7 @@
      * Return the maximum number of active Sessions allowed, or -1 for no limit.
      */
     public int getMaxActiveSessions() {
-
         return (this.maxActiveSessions);
-
     }
 
     /**
@@ -489,12 +428,9 @@
      *            The new maximum number of sessions
      */
     public void setMaxActiveSessions(int max) {
-
         int oldMaxActiveSessions = this.maxActiveSessions;
         this.maxActiveSessions = max;
-        support.firePropertyChange("maxActiveSessions", new Integer(
-                oldMaxActiveSessions), new Integer(this.maxActiveSessions));
-
+        support.firePropertyChange("maxActiveSessions", new Integer(oldMaxActiveSessions), new Integer(this.maxActiveSessions));
     }
     
     /**
@@ -536,8 +472,7 @@
     /**
      * @param notifyListenersCreateSessionOnReplication The notifySessionListenersOnReplication to set.
      */
-    public void setNotifySessionListenersOnReplication(
-            boolean notifyListenersCreateSessionOnReplication) {
+    public void setNotifySessionListenersOnReplication(boolean notifyListenersCreateSessionOnReplication) {
         this.notifySessionListenersOnReplication = notifyListenersCreateSessionOnReplication;
     }
     
@@ -554,8 +489,7 @@
         return notifyListenersOnReplication;
     }
 
-    public void setNotifyListenersOnReplication(
-            boolean notifyListenersOnReplication) {
+    public void setNotifyListenersOnReplication(boolean notifyListenersOnReplication) {
         this.notifyListenersOnReplication = notifyListenersOnReplication;
     }
 
@@ -590,7 +524,6 @@
      *            The associated Container
      */
     public void setContainer(Container container) {
-
         // De-register from the old Container (if any)
         if ((this.container != null) && (this.container instanceof Context))
             ((Context) this.container).removePropertyChangeListener(this);
@@ -600,8 +533,7 @@
 
         // Register with the new Container (if any)
         if ((this.container != null) && (this.container instanceof Context)) {
-            setMaxInactiveInterval(((Context) this.container)
-                    .getSessionTimeout() * 60);
+            setMaxInactiveInterval(((Context) this.container).getSessionTimeout() * 60);
             ((Context) this.container).addPropertyChangeListener(this);
         }
 
@@ -640,22 +572,17 @@
      * @return The session
      */
     public Session createSession(String sessionId, boolean distribute) {
-
         if ((maxActiveSessions >= 0) && (sessions.size() >= maxActiveSessions)) {
             rejectedSessions++;
-            throw new IllegalStateException(sm
-                    .getString("deltaManager.createSession.ise"));
+            throw new IllegalStateException(sm.getString("deltaManager.createSession.ise"));
         }
-
         DeltaSession session = (DeltaSession) super.createSession(sessionId) ;
         session.setExpireTolerance(this.expireTolerance);
         if (distribute) {
             sendCreateSession(session.getId(), session);
         }
         if (log.isDebugEnabled())
-            log.debug(sm.getString("deltaManager.createSession.newSession",
-                    session.getId(), new Integer(sessions.size())));
-
+            log.debug(sm.getString("deltaManager.createSession.newSession",session.getId(), new Integer(sessions.size())));
         return (session);
 
     }
@@ -667,13 +594,14 @@
      */
     protected void sendCreateSession(String sessionId, DeltaSession session) {
         if(cluster != null && cluster.getMembers().length > 0 ) {
-            SessionMessage msg = new SessionMessageImpl(getName(),
-                    SessionMessage.EVT_SESSION_CREATED, null, sessionId,
-                    sessionId + "-" + System.currentTimeMillis());
+            SessionMessage msg = 
+                new SessionMessageImpl(getName(),
+                                       SessionMessage.EVT_SESSION_CREATED, 
+                                       null, 
+                                       sessionId,
+                                       sessionId + "-" + System.currentTimeMillis());
             msg.setTimestamp(session.getCreationTime());
-            if (log.isDebugEnabled())
-                log.debug(sm.getString("deltaManager.sendMessage.newSession",
-                        name, sessionId));
+            if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.sendMessage.newSession",name, sessionId));
             counterSend_EVT_SESSION_CREATED++;
             send(msg);
         }
@@ -717,8 +645,7 @@
      * @throws ClassNotFoundException
      * @throws IOException
      */
-    protected DeltaRequest loadDeltaRequest(DeltaSession session, byte[] data)
-            throws ClassNotFoundException, IOException {
+    protected DeltaRequest loadDeltaRequest(DeltaSession session, byte[] data) throws ClassNotFoundException, IOException {
         ByteArrayInputStream fis = null;
         ReplicationStream ois = null;
         Loader loader = null;
@@ -737,8 +664,7 @@
      * @return serialized delta request
      * @throws IOException
      */
-    protected byte[] unloadDeltaRequest(DeltaRequest deltaRequest)
-            throws IOException {
+    protected byte[] unloadDeltaRequest(DeltaRequest deltaRequest) throws IOException {
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         ObjectOutputStream oos = new ObjectOutputStream(bos);
         deltaRequest.writeExternal(oos);
@@ -756,14 +682,12 @@
      * @exception IOException
      *                if an input/output error occurs
      */
-    protected void deserializeSessions(byte[] data) throws ClassNotFoundException,
-            IOException {
+    protected void deserializeSessions(byte[] data) throws ClassNotFoundException,IOException {
 
         // Initialize our internal data structures
         //sessions.clear(); //should not do this
         // Open an input stream to the specified pathname, if any
-        ClassLoader originalLoader = Thread.currentThread()
-                .getContextClassLoader();
+        ClassLoader originalLoader = Thread.currentThread().getContextClassLoader();
         ObjectInputStream ois = null;
         // Load the previously unloaded active sessions
         try {
@@ -776,6 +700,14 @@
                 session.setManager(this);
                 session.setValid(true);
                 session.setPrimarySession(false);
+                //in case the nodes in the cluster are out of
+                //time synch, this will make sure that we have the
+                //correct timestamp, isValid returns true, cause
+                // accessCount=1
+                session.access();
+                //make sure that the session gets ready to expire if
+                // needed
+                session.setAccessCount(0);
                 session.resetDeltaRequest();
                 // FIXME How inform other session id cache like SingleSignOn
                 // increment sessionCounter to correct stats report
@@ -784,10 +716,7 @@
                 } else {
                     sessionReplaceCounter++;
                     // FIXME better is to grap this sessions again !
-                    if (log.isWarnEnabled())
-                        log.warn(sm.getString(
-                                "deltaManager.loading.existing.session",
-                                session.getIdInternal()));
+                    if (log.isWarnEnabled()) log.warn(sm.getString("deltaManager.loading.existing.session",session.getIdInternal()));
                 }
                 add(session);
             }
@@ -800,14 +729,12 @@
         } finally {
             // Close the input stream
             try {
-                if (ois != null)
-                    ois.close();
+                if (ois != null) ois.close();
             } catch (IOException f) {
                 // ignored
             }
             ois = null;
-            if (originalLoader != null)
-                Thread.currentThread().setContextClassLoader(originalLoader);
+            if (originalLoader != null) Thread.currentThread().setContextClassLoader(originalLoader);
         }
 
     }
@@ -860,6 +787,7 @@
         }
         return ois;
     }
+    
 
     /**
      * Save any currently active sessions in the appropriate persistence
@@ -910,9 +838,7 @@
      *            The listener to add
      */
     public void addLifecycleListener(LifecycleListener listener) {
-
         lifecycle.addLifecycleListener(listener);
-
     }
 
     /**
@@ -920,9 +846,7 @@
      * Lifecycle has no listeners registered, a zero-length array is returned.
      */
     public LifecycleListener[] findLifecycleListeners() {
-
         return lifecycle.findLifecycleListeners();
-
     }
 
     /**
@@ -932,9 +856,7 @@
      *            The listener to remove
      */
     public void removeLifecycleListener(LifecycleListener listener) {
-
         lifecycle.removeLifecycleListener(listener);
-
     }
 
     /**
@@ -947,15 +869,12 @@
      *                component from being used
      */
     public void start() throws LifecycleException {
-        if (!initialized)
-            init();
+        if (!initialized) init();
 
         // Validate and update our current component state
         if (started) {
             return;
         }
-        if(log.isInfoEnabled())
-            log.info("Starting clustering manager...:"+getName());
         started = true;
         lifecycle.fireLifecycleEvent(START_EVENT, null);
 
@@ -967,6 +886,7 @@
             //the channel is already running
             Cluster cluster = getCluster() ;
             // stop remove cluster binding
+            //wow, how many nested levels of if statements can we have ;)
             if(cluster == null) {
                 Container context = getContainer() ;
                 if(context != null && context instanceof Context) {
@@ -980,7 +900,7 @@
                              if(engine != null && engine instanceof Engine) {
                                  cluster = engine.getCluster();
                                  if(cluster != null && cluster instanceof CatalinaCluster) {
-                                         setCluster((CatalinaCluster) cluster) ;
+                                     setCluster((CatalinaCluster) cluster) ;
                                  }
                              } else {
                                      cluster = null ;
@@ -1000,16 +920,13 @@
                     } else if( cluster.getContainer() instanceof Engine){
                         type = "Engine" ;
                     }
-                    log.info(sm
-                            .getString("deltaManager.registerCluster", getName(), type, cluster.getClusterName()));
+                    log.info(sm.getString("deltaManager.registerCluster", getName(), type, cluster.getClusterName()));
                 }
             }
-            if (log.isInfoEnabled())
-                log.info(sm
-                        .getString("deltaManager.startClustering", getName()));
+            if (log.isInfoEnabled()) log.info(sm.getString("deltaManager.startClustering", getName()));
             //to survice context reloads, as only a stop/start is called, not
             // createManager
-            ((CatalinaCluster)cluster).addManager(getName(), this);
+            cluster.registerManager(this);
 
             getAllClusterSessions();
 
@@ -1029,9 +946,7 @@
             if(mbr == null) { // No domain member found
                  return;
             }
-            SessionMessage msg = new SessionMessageImpl(this.getName(),
-                    SessionMessage.EVT_GET_ALL_SESSIONS, null, "GET-ALL",
-                    "GET-ALL-" + getName());
+            SessionMessage msg = new SessionMessageImpl(this.getName(),SessionMessage.EVT_GET_ALL_SESSIONS, null, "GET-ALL","GET-ALL-" + getName());
             msg.setResend(ClusterMessage.FLAG_FORBIDDEN);
             // set reference time
             msg.setTimestamp(beforeSendTime);
@@ -1045,37 +960,22 @@
                      receiverQueue = true ;
                 }
                 cluster.send(msg, mbr);
-                if (log.isWarnEnabled())
-                    log.warn(sm.getString("deltaManager.waitForSessionState",
-                            getName(), mbr,getStateTransferTimeout()));
+                if (log.isWarnEnabled()) log.warn(sm.getString("deltaManager.waitForSessionState",getName(), mbr,getStateTransferTimeout()));
                 // FIXME At sender ack mode this method check only the state transfer and resend is a problem!
                 waitForSendAllSessions(beforeSendTime);
             } finally {
                 synchronized(receivedMessageQueue) {
-                    for (Iterator iter = receivedMessageQueue.iterator(); iter
-                            .hasNext();) {
+                    for (Iterator iter = receivedMessageQueue.iterator(); iter.hasNext();) {
                         SessionMessage smsg = (SessionMessage) iter.next();
                         if (!stateTimestampDrop) {
-                            messageReceived(smsg,
-                                    smsg.getAddress() != null ? (Member) smsg
-                                            .getAddress() : null);
+                            messageReceived(smsg, smsg.getAddress() != null ? (Member) smsg.getAddress() : null);
                         } else {
-                            if (smsg.getEventType() != SessionMessage.EVT_GET_ALL_SESSIONS
-                                    && smsg.getTimestamp() >= stateTransferCreateSendTime) {
+                            if (smsg.getEventType() != SessionMessage.EVT_GET_ALL_SESSIONS && smsg.getTimestamp() >= stateTransferCreateSendTime) {
                                 // FIXME handle EVT_GET_ALL_SESSIONS later
-                                messageReceived(
-                                        smsg,
-                                        smsg.getAddress() != null ? (Member) smsg
-                                                .getAddress()
-                                                : null);
+                                messageReceived(smsg,smsg.getAddress() != null ? (Member) smsg.getAddress() : null);
                             } else {
                                 if (log.isWarnEnabled()) {
-                                    log.warn(sm.getString(
-                                            "deltaManager.dropMessage",
-                                            getName(), smsg
-                                                    .getEventTypeString(),
-                                            new Date(stateTransferCreateSendTime), new Date(
-                                                    smsg.getTimestamp())));
+                                    log.warn(sm.getString("deltaManager.dropMessage",getName(), smsg.getEventTypeString(),new Date(stateTransferCreateSendTime), new Date(smsg.getTimestamp())));
                                 }
                             }
                         }
@@ -1085,8 +985,7 @@
                 }
            }
         } else {
-            if (log.isInfoEnabled())
-                log.info(sm.getString("deltaManager.noMembers", getName()));
+            if (log.isInfoEnabled()) log.info(sm.getString("deltaManager.noMembers", getName()));
         }
     }
 
@@ -1095,29 +994,27 @@
      * @param session cross context session
      */
     protected void registerSessionAtReplicationValve(DeltaSession session) {
-	    	if(replicationValve == null) {
-	    		if(container instanceof StandardContext
-	    				&& ((StandardContext)container).getCrossContext()) {
-	    			Cluster cluster = getCluster() ;
-	    			if(cluster != null && cluster instanceof CatalinaCluster) {
-	    				Valve[] valves = ((CatalinaCluster)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] ;
-	    					}
-	    					
-	    					if(replicationValve == null && log.isDebugEnabled()) {
-	    						log.debug("no ReplicationValve found for CrossContext Support");
-	    					}
-	    				}
-	    			}
-	    		}
-	    	}
-	    	if(replicationValve != null) {
-	    		replicationValve.registerReplicationSession(session);
-	    	}
-    	}
+        if(replicationValve == null) {
+            if(container instanceof StandardContext && ((StandardContext)container).getCrossContext()) {
+                Cluster cluster = getCluster() ;
+                if(cluster != null && cluster instanceof CatalinaCluster) {
+                    Valve[] valves = ((CatalinaCluster)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
@@ -1134,15 +1031,10 @@
                     mbr = member ;
             }
         } else {
-            if(mbrs.length != 0 )
-                mbr = mbrs[0];
+            if(mbrs.length != 0 ) mbr = mbrs[0];
         }
-        if(mbr == null && log.isWarnEnabled())
-           log.warn(sm.getString("deltaManager.noMasterMember",
-                    getName(), localMemberDomain));
-        if(mbr != null && log.isDebugEnabled())
-            log.warn(sm.getString("deltaManager.foundMasterMember",
-                     getName(), mbr));
+        if(mbr == null && log.isWarnEnabled()) log.warn(sm.getString("deltaManager.noMasterMember",getName(), localMemberDomain));
+        if(mbr != null && log.isDebugEnabled()) log.warn(sm.getString("deltaManager.foundMasterMember",getName(), mbr));
         return mbr;
     }
 
@@ -1160,6 +1052,7 @@
                 try {
                     Thread.sleep(100);
                 } catch (Exception sleep) {
+                    //
                 }
                 reqNow = System.currentTimeMillis();
                 isTimeout = ((reqNow - reqStart) > (1000 * getStateTransferTimeout()));
@@ -1178,12 +1071,10 @@
         }
         if (isTimeout || (!getStateTransfered())) {
             counterNoStateTransfered++ ;
-            log.error(sm.getString("deltaManager.noSessionState",
-                    getName(),new Date(beforeSendTime),new Long(reqNow - beforeSendTime)));
+            log.error(sm.getString("deltaManager.noSessionState",getName(),new Date(beforeSendTime),new Long(reqNow - beforeSendTime)));
         } else {
             if (log.isInfoEnabled())
-                log.info(sm.getString("deltaManager.sessionReceived",
-                        getName(), new Date(beforeSendTime), new Long(reqNow - beforeSendTime)));
+                log.info(sm.getString("deltaManager.sessionReceived",getName(), new Date(beforeSendTime), new Long(reqNow - beforeSendTime)));
         }
     }
 
@@ -1204,14 +1095,12 @@
 
         // Validate and update our current component state
         if (!started)
-            throw new LifecycleException(sm
-                    .getString("deltaManager.notStarted"));
+            throw new LifecycleException(sm.getString("deltaManager.notStarted"));
         lifecycle.fireLifecycleEvent(STOP_EVENT, null);
         started = false;
 
         // Expire all active sessions
-        if (log.isInfoEnabled())
-            log.info(sm.getString("deltaManager.expireSessions", getName()));
+        if (log.isInfoEnabled()) log.info(sm.getString("deltaManager.expireSessions", getName()));
         Session sessions[] = findSessions();
         for (int i = 0; i < sessions.length; i++) {
             DeltaSession session = (DeltaSession) sessions[i];
@@ -1226,7 +1115,7 @@
 
         // Require a new random number generator if we are restarted
         this.random = null;
-        getCluster().removeManager(getName(),this);
+        getCluster().removeManager(this);
         replicationValve = null;
         if (initialized) {
             destroy();
@@ -1249,11 +1138,9 @@
         // Process a relevant property change
         if (event.getPropertyName().equals("sessionTimeout")) {
             try {
-                setMaxInactiveInterval(((Integer) event.getNewValue())
-                        .intValue() * 60);
+                setMaxInactiveInterval(((Integer) event.getNewValue()).intValue() * 60);
             } catch (NumberFormatException e) {
-                log.error(sm.getString("deltaManager.sessionTimeout", event
-                        .getNewValue()));
+                log.error(sm.getString("deltaManager.sessionTimeout", event.getNewValue()));
             }
         }
 
@@ -1273,27 +1160,26 @@
         if (cmsg != null && cmsg instanceof SessionMessage) {
             SessionMessage msg = (SessionMessage) cmsg;
             switch (msg.getEventType()) {
-            case SessionMessage.EVT_GET_ALL_SESSIONS:
-            case SessionMessage.EVT_SESSION_CREATED: 
-            case SessionMessage.EVT_SESSION_EXPIRED: 
-            case SessionMessage.EVT_SESSION_ACCESSED:
-            case SessionMessage.EVT_SESSION_DELTA: {
-                synchronized(receivedMessageQueue) {
-                    if(receiverQueue) {
-                        receivedMessageQueue.add(msg);
-                        return ;
+                case SessionMessage.EVT_GET_ALL_SESSIONS:
+                case SessionMessage.EVT_SESSION_CREATED: 
+                case SessionMessage.EVT_SESSION_EXPIRED: 
+                case SessionMessage.EVT_SESSION_ACCESSED:
+                case SessionMessage.EVT_SESSION_DELTA: {
+                    synchronized(receivedMessageQueue) {
+                        if(receiverQueue) {
+                            receivedMessageQueue.add(msg);
+                            return ;
+                        }
                     }
+                   break;
+                }
+                default: {
+                    //we didn't queue, do nothing
+                    break;
                 }
-               break;
-            }
-            default: {
-                //we didn't queue, do nothing
-                break;
-            }
             } //switch
             
-            messageReceived(msg, msg.getAddress() != null ? (Member) msg
-                    .getAddress() : null);
+            messageReceived(msg, msg.getAddress() != null ? (Member) msg.getAddress() : null);
         }
     }
 
@@ -1328,9 +1214,11 @@
      * @return a SessionMessage to be sent,
      */
     public ClusterMessage requestCompleted(String sessionId, boolean expires) {
+        DeltaSession session = null;
         try {
-            DeltaSession session = (DeltaSession) findSession(sessionId);
+            session = (DeltaSession) findSession(sessionId);
             DeltaRequest deltaRequest = session.getDeltaRequest();
+            session.lock();
             SessionMessage msg = null;
             boolean isDeltaRequest = false ;
             synchronized(deltaRequest) {
@@ -1339,8 +1227,10 @@
                     counterSend_EVT_SESSION_DELTA++;
                     byte[] data = unloadDeltaRequest(deltaRequest);
                     msg = new SessionMessageImpl(getName(),
-                            SessionMessage.EVT_SESSION_DELTA, data, sessionId,
-                            sessionId + "-" + System.currentTimeMillis());
+                                                 SessionMessage.EVT_SESSION_DELTA, 
+                                                 data, 
+                                                 sessionId,
+                                                 sessionId + "-" + System.currentTimeMillis());
                     session.resetDeltaRequest();
                 }  
             }
@@ -1348,52 +1238,48 @@
                 if(!expires && !session.isPrimarySession()) {
                     counterSend_EVT_SESSION_ACCESSED++;
                     msg = new SessionMessageImpl(getName(),
-                            SessionMessage.EVT_SESSION_ACCESSED, null, sessionId,
-                            sessionId + "-" + System.currentTimeMillis());
+                                                 SessionMessage.EVT_SESSION_ACCESSED, 
+                                                 null, 
+                                                 sessionId,
+                                                 sessionId + "-" + System.currentTimeMillis());
                     if (log.isDebugEnabled()) {
-                        log.debug(sm.getString(
-                                "deltaManager.createMessage.accessChangePrimary",
-                                getName(), sessionId));
+                        log.debug(sm.getString("deltaManager.createMessage.accessChangePrimary",getName(), sessionId));
                     }
                 }    
             } else { // log only outside synch block!
                 if (log.isDebugEnabled()) {
-                    log.debug(sm.getString(
-                        "deltaManager.createMessage.delta",
-                        getName(), sessionId));
+                    log.debug(sm.getString("deltaManager.createMessage.delta",getName(), sessionId));
                 }
             }
             if (!expires)
                 session.setPrimarySession(true);
             //check to see if we need to send out an access message
             if (!expires && (msg == null)) {
-                long replDelta = System.currentTimeMillis()
-                        - session.getLastTimeReplicated();
+                long replDelta = System.currentTimeMillis() - session.getLastTimeReplicated();
                 if (replDelta >= updateActiveInterval*1000 ||
                     (getMaxInactiveInterval()>=0 &&
                     replDelta >= getMaxInactiveInterval()*1000)) {
                     counterSend_EVT_SESSION_ACCESSED++;
                     msg = new SessionMessageImpl(getName(),
-                            SessionMessage.EVT_SESSION_ACCESSED, null,
-                            sessionId, sessionId + "-" + System.currentTimeMillis());
+                                                 SessionMessage.EVT_SESSION_ACCESSED, 
+                                                 null,
+                                                 sessionId, 
+                                                 sessionId + "-" + System.currentTimeMillis());
                     if (log.isDebugEnabled()) {
-                        log.debug(sm.getString(
-                                "deltaManager.createMessage.access", getName(),
-                                sessionId));
+                        log.debug(sm.getString("deltaManager.createMessage.access", getName(),sessionId));
                     }
                 }
 
             }
 
             //update last replicated time
-            if (msg != null)
-                session.setLastTimeReplicated(System.currentTimeMillis());
+            if (msg != null) session.setLastTimeReplicated(System.currentTimeMillis());
             return msg;
         } catch (IOException x) {
-            log.error(sm.getString(
-                    "deltaManager.createMessage.unableCreateDeltaRequest",
-                    sessionId), x);
+            log.error(sm.getString("deltaManager.createMessage.unableCreateDeltaRequest",sessionId), x);
             return null;
+        }finally {
+            if (session!=null) session.unlock();
         }
 
     }
@@ -1447,12 +1333,8 @@
         // FIX BUG 42720 : don't send a message if no cluster member exists.
         if (cluster != null && cluster.getMembers().length > 0) {
             counterSend_EVT_SESSION_EXPIRED++ ;
-            SessionMessage msg = new SessionMessageImpl(getName(),
-                    SessionMessage.EVT_SESSION_EXPIRED, null, id, id
-                    + "-EXPIRED-MSG");
-            if (log.isDebugEnabled())
-                log.debug(sm.getString("deltaManager.createMessage.expire",
-                        getName(), id));
+            SessionMessage msg = new SessionMessageImpl(getName(),SessionMessage.EVT_SESSION_EXPIRED, null, id, id+ "-EXPIRED-MSG");
+            if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.createMessage.expire",getName(), id));
             send(msg);
         }
     }
@@ -1467,8 +1349,7 @@
         int expireDirect  = 0 ;
         int expireIndirect = 0 ;
         
-        if(log.isDebugEnabled())
-            log.debug("Start expire all sessions " + getName() + " at " + timeNow + " sessioncount " + sessions.length);
+        if(log.isDebugEnabled()) log.debug("Start expire all sessions " + getName() + " at " + timeNow + " sessioncount " + sessions.length);
         for (int i = 0; i < sessions.length; i++) {
             if (sessions[i] instanceof DeltaSession) {
                 DeltaSession session = (DeltaSession) sessions[i];
@@ -1478,13 +1359,12 @@
                         expireDirect++;
                     } else {
                         expireIndirect++;
-                    }
-                }
-            }
-        }
+                    }//end if
+                }//end if
+            }//end if
+        }//for
         long timeEnd = System.currentTimeMillis();
-        if(log.isDebugEnabled())
-             log.debug("End expire sessions " + getName() + " exipre processingTime " + (timeEnd - timeNow) + " expired direct sessions: " + expireDirect + " expired direct sessions: " + expireIndirect);
+        if(log.isDebugEnabled()) log.debug("End expire sessions " + getName() + " exipre processingTime " + (timeEnd - timeNow) + " expired direct sessions: " + expireDirect + " expired direct sessions: " + expireIndirect);
       
     }
     
@@ -1509,12 +1389,11 @@
         boolean sameDomain= localMemberDomain.equals(sender.getDomain());
         if (!sameDomain && log.isWarnEnabled()) {
                 log.warn(sm.getString("deltaManager.receiveMessage.fromWrongDomain",
-                        new Object[] {getName(), 
-                        msg.getEventTypeString(), 
-                        sender,
-                        sender.getDomain(),
-                        localMemberDomain }
-                ));
+                         new Object[] {getName(), 
+                         msg.getEventTypeString(), 
+                         sender,
+                         sender.getDomain(),
+                         localMemberDomain }));
         }
         return sameDomain ;
     }
@@ -1536,49 +1415,47 @@
         }
         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
         try {
-            ClassLoader[] loaders = getClassLoaders(container);
-            if ( loaders != null && loaders.length > 0 ) Thread.currentThread().setContextClassLoader(loaders[0]);
-            if (log.isDebugEnabled())
-                log.debug(sm.getString("deltaManager.receiveMessage.eventType",
-                        getName(), msg.getEventTypeString(), sender));
-
+            
+            ClassLoader[] loaders = getClassLoaders();
+            if ( loaders != null && loaders.length > 0) Thread.currentThread().setContextClassLoader(loaders[0]);
+            if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.receiveMessage.eventType",getName(), msg.getEventTypeString(), sender));
+ 
             switch (msg.getEventType()) {
-            case SessionMessage.EVT_GET_ALL_SESSIONS: {
-                handleGET_ALL_SESSIONS(msg,sender);
-                break;
-            }
-            case SessionMessage.EVT_ALL_SESSION_DATA: {
-                handleALL_SESSION_DATA(msg,sender);
-                break;
-            }
-            case SessionMessage.EVT_ALL_SESSION_TRANSFERCOMPLETE: {
-                handleALL_SESSION_TRANSFERCOMPLETE(msg,sender);
-                break;
-            }
-            case SessionMessage.EVT_SESSION_CREATED: {
-                handleSESSION_CREATED(msg,sender);
-                break;
-            }
-            case SessionMessage.EVT_SESSION_EXPIRED: {
-                handleSESSION_EXPIRED(msg,sender);
-                break;
-            }
-            case SessionMessage.EVT_SESSION_ACCESSED: {
-                handleSESSION_ACCESSED(msg,sender);
-                break;
-            }
-            case SessionMessage.EVT_SESSION_DELTA: {
-               handleSESSION_DELTA(msg,sender);
-               break;
-            }
-            default: {
-                //we didn't recognize the message type, do nothing
-                break;
-            }
+                case SessionMessage.EVT_GET_ALL_SESSIONS: {
+                    handleGET_ALL_SESSIONS(msg,sender);
+                    break;
+                }
+                case SessionMessage.EVT_ALL_SESSION_DATA: {
+                    handleALL_SESSION_DATA(msg,sender);
+                    break;
+                }
+                case SessionMessage.EVT_ALL_SESSION_TRANSFERCOMPLETE: {
+                    handleALL_SESSION_TRANSFERCOMPLETE(msg,sender);
+                    break;
+                }
+                case SessionMessage.EVT_SESSION_CREATED: {
+                    handleSESSION_CREATED(msg,sender);
+                    break;
+                }
+                case SessionMessage.EVT_SESSION_EXPIRED: {
+                    handleSESSION_EXPIRED(msg,sender);
+                    break;
+                }
+                case SessionMessage.EVT_SESSION_ACCESSED: {
+                    handleSESSION_ACCESSED(msg,sender);
+                    break;
+                }
+                case SessionMessage.EVT_SESSION_DELTA: {
+                   handleSESSION_DELTA(msg,sender);
+                   break;
+                }
+                default: {
+                    //we didn't recognize the message type, do nothing
+                    break;
+                }
             } //switch
         } catch (Exception x) {
-            log.error(sm.getString("deltaManager.receiveMessage.error",
-                    getName()), x);
+            log.error(sm.getString("deltaManager.receiveMessage.error",getName()), x);
         } finally {
             Thread.currentThread().setContextClassLoader(contextLoader);
         }
@@ -1594,10 +1471,7 @@
      */
     protected void handleALL_SESSION_TRANSFERCOMPLETE(SessionMessage msg, Member sender) {
         counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE++ ;
-        if (log.isDebugEnabled())
-            log.debug(sm.getString(
-                    "deltaManager.receiveMessage.transfercomplete",
-                    getName(), sender.getHost(), new Integer(sender.getPort())));
+        if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.receiveMessage.transfercomplete",getName(), sender.getHost(), new Integer(sender.getPort())));
         stateTransferCreateSendTime = msg.getTimestamp() ;
         stateTransfered = true ;
     }
@@ -1609,18 +1483,20 @@
      * @throws IOException
      * @throws ClassNotFoundException
      */
-    protected void handleSESSION_DELTA(SessionMessage msg, Member sender)
-            throws IOException, ClassNotFoundException {
+    protected void handleSESSION_DELTA(SessionMessage msg, Member sender) throws IOException, ClassNotFoundException {
         counterReceive_EVT_SESSION_DELTA++;
         byte[] delta = msg.getSession();
         DeltaSession session = (DeltaSession) findSession(msg.getSessionID());
         if (session != null) {
-            if (log.isDebugEnabled())
-                log.debug(sm.getString("deltaManager.receiveMessage.delta",
-                    getName(), msg.getSessionID()));
-            DeltaRequest dreq = loadDeltaRequest(session, delta);
-            dreq.execute(session, notifyListenersOnReplication);
-            session.setPrimarySession(false);
+            if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.receiveMessage.delta",getName(), msg.getSessionID()));
+            try {
+                session.lock();
+                DeltaRequest dreq = loadDeltaRequest(session, delta);
+                dreq.execute(session, notifyListenersOnReplication);
+                session.setPrimarySession(false);
+            }finally {
+                session.unlock();
+            }
         }
     }
 
@@ -1632,13 +1508,9 @@
      */
     protected void handleSESSION_ACCESSED(SessionMessage msg,Member sender) throws IOException {
         counterReceive_EVT_SESSION_ACCESSED++;
-        DeltaSession session = (DeltaSession) findSession(msg
-                .getSessionID());
+        DeltaSession session = (DeltaSession) findSession(msg.getSessionID());
         if (session != null) {
-            if (log.isDebugEnabled())
-                log.debug(sm.getString(
-                        "deltaManager.receiveMessage.accessed",
-                        getName(), msg.getSessionID()));
+            if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.receiveMessage.accessed",getName(), msg.getSessionID()));
             session.access();
             session.setPrimarySession(false);
             session.endAccess();
@@ -1653,13 +1525,9 @@
      */
     protected void handleSESSION_EXPIRED(SessionMessage msg,Member sender) throws IOException {
         counterReceive_EVT_SESSION_EXPIRED++;
-        DeltaSession session = (DeltaSession) findSession(msg
-                .getSessionID());
+        DeltaSession session = (DeltaSession) findSession(msg.getSessionID());
         if (session != null) {
-            if (log.isDebugEnabled())
-                log.debug(sm.getString(
-                        "deltaManager.receiveMessage.expired",
-                        getName(), msg.getSessionID()));
+            if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.receiveMessage.expired",getName(), msg.getSessionID()));
             session.expire(notifySessionListenersOnReplication, false);
         }
     }
@@ -1671,10 +1539,7 @@
      */
     protected void handleSESSION_CREATED(SessionMessage msg,Member sender) {
         counterReceive_EVT_SESSION_CREATED++;
-        if (log.isDebugEnabled())
-            log.debug(sm.getString(
-                    "deltaManager.receiveMessage.createNewSession",
-                    getName(), msg.getSessionID()));
+        if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.receiveMessage.createNewSession",getName(), msg.getSessionID()));
         DeltaSession session = (DeltaSession) createEmptySession();
         sessionCounter++;
         session.setManager(this);
@@ -1705,16 +1570,10 @@
      */
     protected void handleALL_SESSION_DATA(SessionMessage msg,Member sender) throws ClassNotFoundException, IOException {
         counterReceive_EVT_ALL_SESSION_DATA++;
-        if (log.isDebugEnabled())
-            log.debug(sm.getString(
-                    "deltaManager.receiveMessage.allSessionDataBegin",
-                    getName()));
+        if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.receiveMessage.allSessionDataBegin",getName()));
         byte[] data = msg.getSession();
         deserializeSessions(data);
-        if (log.isDebugEnabled())
-            log.debug(sm.getString(
-                    "deltaManager.receiveMessage.allSessionDataAfter",
-                    getName()));
+        if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.receiveMessage.allSessionDataAfter",getName()));
         //stateTransferred = true;
     }
 
@@ -1727,13 +1586,10 @@
      * @param sender
      * @throws IOException
      */
-    protected void handleGET_ALL_SESSIONS(SessionMessage msg, Member sender)
-            throws IOException {
+    protected void handleGET_ALL_SESSIONS(SessionMessage msg, Member sender) throws IOException {
         counterReceive_EVT_GET_ALL_SESSIONS++;
         //get a list of all the session from this manager
-        if (log.isDebugEnabled())
-            log.debug(sm.getString(
-                    "deltaManager.receiveMessage.unloadingBegin", getName()));
+        if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.receiveMessage.unloadingBegin", getName()));
         // Write the number of active sessions, followed by the details
         // get all sessions and serialize without sync
         Session[] currentSessions = findSessions();
@@ -1742,13 +1598,10 @@
             sendSessions(sender, currentSessions, findSessionTimestamp);
         } else {
             // send session at blocks
-            int len = currentSessions.length < getSendAllSessionsSize() ? currentSessions.length
-                    : getSendAllSessionsSize();
+            int len = currentSessions.length < getSendAllSessionsSize() ? currentSessions.length : getSendAllSessionsSize();
             Session[] sendSessions = new Session[len];
             for (int i = 0; i < currentSessions.length; i += getSendAllSessionsSize()) {
-                len = i + getSendAllSessionsSize() > currentSessions.length ? currentSessions.length
-                        - i 
-                        : getSendAllSessionsSize();
+                len = i + getSendAllSessionsSize() > currentSessions.length ? currentSessions.length - i : getSendAllSessionsSize();
                 System.arraycopy(currentSessions, i, sendSessions, 0, len);
                 sendSessions(sender, sendSessions,findSessionTimestamp);
                 if (getSendAllSessionsWaitTime() > 0) {
@@ -1756,19 +1609,13 @@
                         Thread.sleep(getSendAllSessionsWaitTime());
                     } catch (Exception sleep) {
                     }
-                }
-            }
-        }
+                }//end if
+            }//for
+        }//end if
         
-        SessionMessage newmsg = new SessionMessageImpl(name,
-                SessionMessage.EVT_ALL_SESSION_TRANSFERCOMPLETE, null,
-                "SESSION-STATE-TRANSFERED", "SESSION-STATE-TRANSFERED"
-                        + getName());
+        SessionMessage newmsg = new SessionMessageImpl(name,SessionMessage.EVT_ALL_SESSION_TRANSFERCOMPLETE, null,"SESSION-STATE-TRANSFERED", "SESSION-STATE-TRANSFERED"+ getName());
         newmsg.setTimestamp(findSessionTimestamp);
-        if (log.isDebugEnabled())
-            log.debug(sm.getString(
-                    "deltaManager.createMessage.allSessionTransfered",
-                    getName()));
+        if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.createMessage.allSessionTransfered",getName()));
         counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE++;
         cluster.send(newmsg, sender);
     }
@@ -1781,24 +1628,15 @@
      * @param sendTimestamp
      * @throws IOException
      */
-    protected void sendSessions(Member sender, Session[] currentSessions,
-            long sendTimestamp) throws IOException {
+    protected void sendSessions(Member sender, Session[] currentSessions,long sendTimestamp) throws IOException {
         byte[] data = serializeSessions(currentSessions);
-        if (log.isDebugEnabled())
-            log.debug(sm.getString(
-                    "deltaManager.receiveMessage.unloadingAfter",
-                    getName()));
-        SessionMessage newmsg = new SessionMessageImpl(name,
-                SessionMessage.EVT_ALL_SESSION_DATA, data,
-                "SESSION-STATE", "SESSION-STATE-" + getName());
+        if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.receiveMessage.unloadingAfter",getName()));
+        SessionMessage newmsg = new SessionMessageImpl(name,SessionMessage.EVT_ALL_SESSION_DATA, data,"SESSION-STATE", "SESSION-STATE-" + getName());
         newmsg.setTimestamp(sendTimestamp);
         //if(isSendSESSIONSTATEcompressed()) {
         //    newmsg.setCompress(ClusterMessage.FLAG_ALLOWED);
         //}
-        if (log.isDebugEnabled())
-            log.debug(sm.getString(
-                    "deltaManager.createMessage.allSessionData",
-                    getName()));
+        if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.createMessage.allSessionData",getName()));
         counterSend_EVT_ALL_SESSION_DATA++;
         cluster.send(newmsg, sender);
     }

Modified: tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java
URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java?rev=812933&r1=812932&r2=812933&view=diff
==============================================================================
--- tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java (original)
+++ tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java Wed Sep  9 13:03:04 2009
@@ -460,7 +460,7 @@
                 log.error("Starting... no cluster associated with this context:"+getName());
                 return;
             }
-            cluster.addManager(getName(),this);
+            cluster.registerManager(this);
 
             if (cluster.getMembers().length > 0) {
                 Member mbr = cluster.getMembers()[0];
@@ -518,7 +518,7 @@
         try
         {
             this.sessions.clear();
-            cluster.removeManager(getName(),this);
+            cluster.removeManager(this);
         }
         catch ( Exception x )
         {

Modified: tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java
URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java?rev=812933&r1=812932&r2=812933&view=diff
==============================================================================
--- tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java (original)
+++ tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java Wed Sep  9 13:03:04 2009
@@ -569,70 +569,43 @@
         return manager;
     }
 
-    /** This method is actually never called.
-     * The TC 6 cluster interface forces it to exist,
-     * but the ported cluster managers from TC 5.5
-     * use addManager(String, Manager) instead.
-     */
-    public void registerManager(Manager manager) {
-    }
-
     /**
      * remove an application form cluster replication bus
      * 
      * @see org.apache.catalina.cluster.CatalinaCluster#removeManager(java.lang.String,Manager)
      */
-    public void removeManager(String name,Manager manager) {
-        if (manager != null) {
+    public void removeManager(Manager manager) {
+        if (manager != null && manager instanceof ClusterManager ) {
+            ClusterManager cmgr = (ClusterManager) manager;
             // Notify our interested LifecycleListeners
-            lifecycle.fireLifecycleEvent(BEFORE_MANAGERUNREGISTER_EVENT,
-                    manager);
-            managers.remove(getManagerName(name,manager));
-            if (manager instanceof ClusterManager)
-                ((ClusterManager) manager).setCluster(null);
+            lifecycle.fireLifecycleEvent(BEFORE_MANAGERUNREGISTER_EVENT,manager);
+            managers.remove(getManagerName(cmgr.getName(),manager));
+            cmgr.setCluster(null);
             // Notify our interested LifecycleListeners
-            lifecycle
-                    .fireLifecycleEvent(AFTER_MANAGERUNREGISTER_EVENT, manager);
+            lifecycle.fireLifecycleEvent(AFTER_MANAGERUNREGISTER_EVENT, manager);
         }
     }
 
-    /** This method is actually never called.
-     * The TC 6 cluster interface forces it to exist,
-     * but the ported cluster managers from TC 5.5
-     * use RemoveManager(String, Manager) instead.
-     */
-    public void removeManager(Manager manager) {
-    }
-
-    /**
-     * add an application to cluster replication bus
-     * 
-     * @param name
-     *            of the context
-     * @param manager
-     *            manager to register
-     * @see org.apache.catalina.cluster.CatalinaCluster#addManager(java.lang.String,
-     *      org.apache.catalina.Manager)
-     */
-    public void addManager(String name, Manager manager) {
-        if (!manager.getDistributable()) {
-            log.warn("Manager with name " + name
-                    + " is not distributable, can't add as cluster manager");
+    public void registerManager(Manager manager) {
+    
+        if (! (manager instanceof ClusterManager)) {
+            log.warn("Manager [ " + manager + "] does not implement ClusterManager, addition to cluster has been aborted.");
             return;
         }
+        ClusterManager cmanager = (ClusterManager) manager ;
+        cmanager.setDistributable(true);
         // Notify our interested LifecycleListeners
         lifecycle.fireLifecycleEvent(BEFORE_MANAGERREGISTER_EVENT, manager);
-        String clusterName = getManagerName(name, manager);
-        if (manager instanceof ClusterManager) {
-            ClusterManager cmanager = (ClusterManager) manager ;
-            cmanager.setName(clusterName);
-            cmanager.setCluster(this);
-            if(cmanager.isDefaultMode())
-                transferProperty("manager",cmanager);
-        }
+        String clusterName = getManagerName(cmanager.getName(), manager);
+        cmanager.setName(clusterName);
+        cmanager.setCluster(this);
+        if(cmanager.isDefaultMode())
+            transferProperty("manager",cmanager);
+    
         managers.put(clusterName, manager);
         // Notify our interested LifecycleListeners
         lifecycle.fireLifecycleEvent(AFTER_MANAGERREGISTER_EVENT, manager);
+    
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org