Author: fhanik
Date: Fri Sep 29 09:32:32 2006
New Revision: 451343
URL: http://svn.apache.org/viewvc?view=rev&rev=451343
Log:
Update configurations options, this new feature allows a specific <Context> to
overwrite what cluster manager is used by specifying a <Manager> element inside
the context element and the cluster will be notified of it.
This allows for a cleaner config, as the cluster does no longer have to forward
all manager settings, and allows documentation to be much clearer on what
settings are available.
Modified:
tomcat/tc6.0.x/trunk/conf/server.xml
tomcat/tc6.0.x/trunk/java/org/apache/catalina/Cluster.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/ClusterManager.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/ClusterRuleSet.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/SimpleTcpReplicationManager.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/MembershipListener.java
Modified: tomcat/tc6.0.x/trunk/conf/server.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/conf/server.xml?view=diff&rev=451343&r1=451342&r2=451343
==============================================================================
--- tomcat/tc6.0.x/trunk/conf/server.xml (original)
+++ tomcat/tc6.0.x/trunk/conf/server.xml Fri Sep 29 09:32:32 2006
@@ -192,11 +192,11 @@
-->
<!--
- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
-
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
- expireSessionsOnShutdown="false"
- useDirtyFlag="true"
- notifyListenersOnReplication="true">
+ <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
+ <Manager className="org.apache.catalina.ha.session.DeltaManager"
+ expireSessionsOnShutdown="false"
+ notifyListenersOnReplication="true"/>
+
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership
className="org.apache.catalina.tribes.membership.McastService"
mcastAddr="228.0.0.4"
@@ -215,7 +215,7 @@
<Interceptor
className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor
className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor
className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
- </Channel>
+ </Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/Cluster.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/Cluster.java?view=diff&rev=451343&r1=451342&r2=451343
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/Cluster.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/Cluster.java Fri Sep 29
09:32:32 2006
@@ -100,6 +100,14 @@
* associated
*/
public Manager createManager(String name);
+
+ /**
+ * Register a manager with the cluster. If the cluster is not responsible
+ * for creating a manager, then the container will at least notify the
+ * cluster that this mananger is participating in the cluster.
+ * @param manager Manager
+ */
+ public void registerManager(Manager manager);
// --------------------------------------------------------- Cluster Wide
Deployments
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java?view=diff&rev=451343&r1=451342&r2=451343
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java Fri
Sep 29 09:32:32 2006
@@ -4193,6 +4193,10 @@
} else {
contextManager = new StandardManager();
}
+ } else if ((getCluster() != null) && distributable) {
+ //let the cluster know that there is a context that is
distributable
+ //and that it has its own manager
+ getCluster().registerManager(manager);
}
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/ClusterManager.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/ClusterManager.java?view=diff&rev=451343&r1=451342&r2=451343
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/ClusterManager.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/ClusterManager.java Fri
Sep 29 09:32:32 2006
@@ -107,4 +107,5 @@
public boolean isNotifyListenersOnReplication();
+ public ClusterManager cloneFromTemplate();
}
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/ClusterRuleSet.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/ClusterRuleSet.java?view=diff&rev=451343&r1=451342&r2=451343
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/ClusterRuleSet.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/ClusterRuleSet.java Fri
Sep 29 09:32:32 2006
@@ -85,7 +85,16 @@
*/
public void addRuleInstances(Digester digester) {
//Cluster configuration start
+ digester.addObjectCreate(prefix + "Manager",
+ null, // MUST be specified in the element
+ "className");
+ digester.addSetProperties(prefix + "Manager");
+ digester.addSetNext(prefix + "Manager",
+ "setManagerTemplate",
+ "org.apache.catalina.ha.ClusterManager");
+
+
digester.addObjectCreate(prefix + "Channel",
null, // MUST be specified in the element
"className");
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java?view=diff&rev=451343&r1=451342&r2=451343
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java
Fri Sep 29 09:32:32 2006
@@ -19,16 +19,14 @@
import java.io.IOException;
import org.apache.catalina.LifecycleException;
-import org.apache.catalina.Loader;
import org.apache.catalina.Session;
import org.apache.catalina.ha.CatalinaCluster;
import org.apache.catalina.ha.ClusterManager;
import org.apache.catalina.ha.ClusterMessage;
import org.apache.catalina.session.StandardManager;
-import org.apache.catalina.tribes.Member;
+import org.apache.catalina.tribes.Channel;
import org.apache.catalina.tribes.io.ReplicationStream;
import org.apache.catalina.tribes.tipis.LazyReplicatedMap;
-import org.apache.catalina.tribes.Channel;
/**
[EMAIL PROTECTED] Filip Hanik
@@ -266,6 +264,16 @@
public String[] getInvalidatedSessions() {
return new String[0];
+ }
+
+ public ClusterManager cloneFromTemplate() {
+ BackupManager result = new BackupManager();
+ result.mExpireSessionsOnShutdown = mExpireSessionsOnShutdown;
+ result.name = "Clone-from-"+name;
+ result.cluster = cluster;
+ result.notifyListenersOnReplication = notifyListenersOnReplication;
+ result.mapSendOptions = mapSendOptions;
+ return result;
}
}
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java?view=diff&rev=451343&r1=451342&r2=451343
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
Fri Sep 29 09:32:32 2006
@@ -43,6 +43,7 @@
import org.apache.catalina.tribes.io.ReplicationStream;
import org.apache.catalina.util.LifecycleSupport;
import org.apache.catalina.util.StringManager;
+import org.apache.catalina.ha.ClusterManager;
/**
* The DeltaManager manages replicated sessions by only replicating the deltas
@@ -1496,4 +1497,23 @@
cluster.send(newmsg, sender);
}
+ public ClusterManager cloneFromTemplate() {
+ DeltaManager result = new DeltaManager();
+ result.name = "Clone-from-"+name;
+ result.cluster = cluster;
+ result.replicationValve = replicationValve;
+ result.maxActiveSessions = maxActiveSessions;
+ result.expireSessionsOnShutdown = expireSessionsOnShutdown;
+ result.notifyListenersOnReplication = notifyListenersOnReplication;
+ result.notifySessionListenersOnReplication =
notifySessionListenersOnReplication;
+ result.stateTransferTimeout = stateTransferTimeout;
+ result.sendAllSessions = sendAllSessions;
+ result.sendClusterDomainOnly = sendClusterDomainOnly ;
+ result.sendAllSessionsSize = sendAllSessionsSize;
+ result.sendAllSessionsWaitTime = sendAllSessionsWaitTime ;
+ result.receiverQueue = receiverQueue ;
+ result.stateTimestampDrop = stateTimestampDrop ;
+ result.stateTransferCreateSendTime = stateTransferCreateSendTime;
+ return result;
+ }
}
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/SimpleTcpReplicationManager.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/SimpleTcpReplicationManager.java?view=diff&rev=451343&r1=451342&r2=451343
==============================================================================
---
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/SimpleTcpReplicationManager.java
(original)
+++
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/SimpleTcpReplicationManager.java
Fri Sep 29 09:32:32 2006
@@ -687,4 +687,8 @@
return cluster;
}
+ public ClusterManager cloneFromTemplate() {
+ throw new UnsupportedOperationException();
+ }
+
}
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java?view=diff&rev=451343&r1=451342&r2=451343
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
Fri Sep 29 09:32:32 2006
@@ -37,18 +37,17 @@
import org.apache.catalina.Manager;
import org.apache.catalina.Valve;
import org.apache.catalina.ha.CatalinaCluster;
-import org.apache.catalina.tribes.Channel;
-import org.apache.catalina.tribes.ChannelListener;
import org.apache.catalina.ha.ClusterListener;
import org.apache.catalina.ha.ClusterManager;
import org.apache.catalina.ha.ClusterMessage;
import org.apache.catalina.ha.ClusterValve;
+import org.apache.catalina.ha.session.DeltaManager;
+import org.apache.catalina.ha.util.IDynamicProperty;
+import org.apache.catalina.tribes.Channel;
+import org.apache.catalina.tribes.ChannelListener;
import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.MembershipListener;
import org.apache.catalina.tribes.group.GroupChannel;
-
-import org.apache.catalina.ha.session.DeltaManager;
-import org.apache.catalina.ha.util.IDynamicProperty;
import org.apache.catalina.util.LifecycleSupport;
import org.apache.catalina.util.StringManager;
import org.apache.commons.logging.Log;
@@ -147,8 +146,7 @@
*/
protected Map managers = new HashMap();
- private String managerClassName =
"org.apache.catalina.ha.session.DeltaManager";
-
+ protected ClusterManager managerTemplate = new DeltaManager();
private List valves = new ArrayList();
@@ -252,14 +250,20 @@
this.notifyLifecycleListenerOnFailure);
}
+ /**
+ * @deprecated use getManagerTemplate().getClass().getName() instead.
+ * @return String
+ */
public String getManagerClassName() {
- if(managerClassName != null)
- return managerClassName;
- return (String)getProperty("manager.className");
+ return managerTemplate.getClass().getName();
}
+ /**
+ * @deprecated use nested <Manager> element inside the cluster
config instead.
+ * @param managerClassName String
+ */
public void setManagerClassName(String managerClassName) {
- this.managerClassName = managerClassName;
+ log.warn("setManagerClassName is deprecated, use nested <Manager>
element inside the <Cluster> element instead, this request will be ignored.");
}
/**
@@ -337,6 +341,10 @@
this.channel = channel;
}
+ public void setManagerTemplate(ClusterManager managerTemplate) {
+ this.managerTemplate = managerTemplate;
+ }
+
/**
* has members
*/
@@ -465,6 +473,10 @@
return channel;
}
+ public ClusterManager getManagerTemplate() {
+ return managerTemplate;
+ }
+
/**
* Create new Manager without add to cluster (comes with start the manager)
*
@@ -477,26 +489,25 @@
public synchronized Manager createManager(String name) {
if (log.isDebugEnabled()) log.debug("Creating ClusterManager for
context " + name + " using class " + getManagerClassName());
Manager manager = null;
- ClassLoader oldCtxLoader =
Thread.currentThread().getContextClassLoader();
try {
-
Thread.currentThread().setContextClassLoader(SimpleTcpCluster.class.getClassLoader());
- manager = (Manager)
getClass().getClassLoader().loadClass(getManagerClassName()).newInstance();
+ manager = managerTemplate.cloneFromTemplate();
} catch (Exception x) {
- log.error("Unable to load class for replication manager", x);
+ log.error("Unable to clone cluster manager, defaulting to
org.apache.catalina.ha.session.DeltaManager", x);
manager = new org.apache.catalina.ha.session.DeltaManager();
} finally {
- Thread.currentThread().setContextClassLoader(oldCtxLoader);
- if(manager != null) {
- manager.setDistributable(true);
- if (manager instanceof ClusterManager) {
- ClusterManager cmanager = (ClusterManager) manager ;
- cmanager.setDefaultMode(true);
- cmanager.setName(getManagerName(name,manager));
- cmanager.setCluster(this);
- }
- }
+ if(manager != null) registerManager(manager);
}
return manager;
+ }
+
+ public void registerManager(Manager manager) {
+ manager.setDistributable(true);
+ if (manager instanceof ClusterManager) {
+ ClusterManager cmanager = (ClusterManager) manager ;
+ cmanager.setDefaultMode(true);
+
cmanager.setName(getManagerName(((ClusterManager)manager).getName(),manager));
+ cmanager.setCluster(this);
+ }
}
/**
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/MembershipListener.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/MembershipListener.java?view=diff&rev=451343&r1=451342&r2=451343
==============================================================================
---
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/MembershipListener.java
(original)
+++
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/MembershipListener.java
Fri Sep 29 09:32:32 2006
@@ -35,7 +35,7 @@
/**
* A member was removed from the group<br>
- * If the member left voluntarily, the payload will contain the
Member.SHUTDOWN_PAYLOAD data
+ * If the member left voluntarily, the Member.getCommand will contain the
Member.SHUTDOWN_PAYLOAD data
* @param member Member
* @see Member#SHUTDOWN_PAYLOAD
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]