Author: kfujino Date: Wed May 15 05:46:13 2013 New Revision: 1482684 URL: http://svn.apache.org/r1482684 Log: - Rather than get cluster instance from container on every request, use instance variable. - Reduce nest.
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/tcp/ReplicationValve.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/tcp/ReplicationValve.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/tcp/ReplicationValve.java?rev=1482684&r1=1482683&r2=1482684&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/tcp/ReplicationValve.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/tcp/ReplicationValve.java Wed May 15 05:46:13 2013 @@ -26,7 +26,9 @@ import java.util.regex.PatternSyntaxExce import javax.servlet.ServletException; +import org.apache.catalina.Cluster; import org.apache.catalina.Context; +import org.apache.catalina.LifecycleException; import org.apache.catalina.Manager; import org.apache.catalina.Session; import org.apache.catalina.connector.Request; @@ -331,26 +333,19 @@ public class ReplicationValve crossContextSessions.set(new ArrayList<DeltaSession>()); } getNext().invoke(request, response); - if(context != null) { - Manager manager = context.getManager(); - if (manager != null && manager instanceof ClusterManager) { - ClusterManager clusterManager = (ClusterManager) manager; - CatalinaCluster containerCluster = (CatalinaCluster) getContainer().getCluster(); - if (containerCluster == null) { - if (log.isWarnEnabled()) - log.warn(sm.getString("ReplicationValve.nocluster")); - return; - } - // valve cluster can access manager - other cluster handle replication - // at host level - hopefully! - if(containerCluster.getManager(clusterManager.getName()) == null) - return ; - if(containerCluster.hasMembers()) { - sendReplicationMessage(request, totalstart, isCrossContext, clusterManager, containerCluster); - } else { - resetReplicationRequest(request,isCrossContext); - } - } + if(context != null && cluster != null + && context.getManager() instanceof ClusterManager) { + ClusterManager clusterManager = (ClusterManager) context.getManager(); + + // valve cluster can access manager - other cluster handle replication + // at host level - hopefully! + if(cluster.getManager(clusterManager.getName()) == null) + return ; + if(cluster.hasMembers()) { + sendReplicationMessage(request, totalstart, isCrossContext, clusterManager, cluster); + } else { + resetReplicationRequest(request,isCrossContext); + } } } finally { // Array must be remove: Current master request send endAccess at recycle. @@ -378,7 +373,29 @@ public class ReplicationValve nrOfSendRequests = 0; nrOfCrossContextSendRequests = 0; } - + + /** + * Start this component and implement the requirements + * of {@link org.apache.catalina.util.LifecycleBase#startInternal()}. + * + * @exception LifecycleException if this component detects a fatal error + * that prevents this component from being used + */ + @Override + protected synchronized void startInternal() throws LifecycleException { + if (cluster == null) { + Cluster containerCluster = getContainer().getCluster(); + if (containerCluster instanceof CatalinaCluster) { + setCluster((CatalinaCluster)containerCluster); + } else { + if (log.isWarnEnabled()) { + log.warn(sm.getString("ReplicationValve.nocluster")); + } + } + } + super.startInternal(); + } + // --------------------------------------------------------- Protected Methods Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1482684&r1=1482683&r2=1482684&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Wed May 15 05:46:13 2013 @@ -83,6 +83,11 @@ <code>FileMessageFactory</code> in <code>FarmWarDeployer</code>. (kfujino) </add> + <scode> + Simplify the code of <code>ReplicationValve</code>: Rather than get + cluster instance from container on every request, use instance variable. + (kfujino) + </scode> </changelog> </subsection> </section> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org