Author: rjung Date: Sun Sep 18 09:21:24 2011 New Revision: 1172234 URL: http://svn.apache.org/viewvc?rev=1172234&view=rev Log: Support a regexp based filter of attribute names in ClusterManagerBase and DeltaSession.
Only attributes whose names match will be distributed. An empty filter means all attributes will be distributed (unchanged default behaviour). Modified: tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java Modified: tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java?rev=1172234&r1=1172233&r2=1172234&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java Sun Sep 18 09:21:24 2011 @@ -19,6 +19,7 @@ package org.apache.catalina.ha.session; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.util.regex.Pattern; import org.apache.catalina.Container; import org.apache.catalina.Loader; @@ -35,6 +36,64 @@ import org.apache.catalina.tribes.io.Rep public abstract class ClusterManagerBase extends ManagerBase implements ClusterManager { + /** + * The pattern used for including session attributes to + * replication, e.g. <code>^(userName|sessionHistory)$</code>. + * If not set, all session attributes will be eligible for replication. + */ + private String sessionAttributeFilter = null; + + /** + * The compiled pattern used for including session attributes to + * replication, e.g. <code>^(userName|sessionHistory)$</code>. + * If not set, all session attributes will be eligible for replication. + */ + private Pattern sessionAttributePattern = null; + + + /** + * Return the string pattern used for including session attributes + * to replication. + * + * @return the sessionAttributeFilter + */ + public String getSessionAttributeFilter() { + return sessionAttributeFilter; + } + + /** + * Set the pattern used for including session attributes to replication. + * If not set, all session attributes will be eligible for replication. + * <p> + * E.g. <code>^(userName|sessionHistory)$</code> + * </p> + * + * @param sessionAttributeFilter + * the filter name pattern to set + */ + public void setSessionAttributeFilter(String sessionAttributeFilter) { + if (sessionAttributeFilter == null + || sessionAttributeFilter.trim().equals("")) { + this.sessionAttributeFilter = null; + sessionAttributePattern = null; + } else { + this.sessionAttributeFilter = sessionAttributeFilter; + sessionAttributePattern = Pattern.compile(sessionAttributeFilter); + } + } + + /** + * Check whether the given session attribute should be distributed + * + * @return true if the attribute should be distributed + */ + public boolean willAttributeDistribute(String name) { + if (sessionAttributePattern == null) { + return true; + } + return sessionAttributePattern.matcher(name).matches(); + } + public static ClassLoader[] getClassLoaders(Container container) { Loader loader = null; ClassLoader classLoader = null; @@ -88,4 +147,4 @@ public abstract class ClusterManagerBase public void unload() { // NOOP } -} \ No newline at end of file +} Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java?rev=1172234&r1=1172233&r2=1172234&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java Sun Sep 18 09:21:24 2011 @@ -559,6 +559,35 @@ public class DeltaSession extends Standa /** + * Check whether the Object can be distributed. + * The object is always distributable, if the cluster manager + * decides to never distribute it. + * @param name The name of the attribute to check + * @param value The value of the attribute to check + * @return true if the attribute is distributable, false otherwise + */ + protected boolean isAttributeDistributable(String name, Object value) { + if (manager instanceof ClusterManagerBase && + !((ClusterManagerBase)manager).willAttributeDistribute(name)) + return true; + return super.isAttributeDistributable(name, value); + } + + /** + * Exclude attributes from replication. + * @param name the attribute's name + * @return true is attribute should not be replicated + */ + protected boolean exclude(String name) { + + if (super.exclude(name)) + return true; + if (manager instanceof ClusterManagerBase) + return !((ClusterManagerBase)manager).willAttributeDistribute(name); + return false; + } + + /** * Remove the object bound with the specified name from this session. If the * session does not have an object bound with this name, this method does * nothing. @@ -635,6 +664,7 @@ public class DeltaSession extends Standa // -------------------------------------------- HttpSession Private Methods + /** * Read a serialized version of this session object from the specified * object input stream. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org