tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Keiichi Fujino <kfuj...@apache.org>
Subject Re: svn commit: r1172234 - in /tomcat/trunk/java/org/apache/catalina/ha/session: ClusterManagerBase.java DeltaSession.java
Date Tue, 20 Sep 2011 09:05:07 GMT
I think that it is necessary to add sessionAttributeFilter to the
cloneFromTemplate method of
both BackupManager and DeltaManager.
Otherwise, it will not be set to BackupManager or DeltaManager,
even if it sets sessionAttributeFilter to server.xml.

For example, the following codes are added to each cloneFromTemplate.
===
result.setSessionAttributeFilter(getSessionAttributeFilter());
===

Best Regards.


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



-- 
Keiichi.Fujino

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


Mime
View raw message