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><description>/<version></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