You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2010/02/05 18:53:30 UTC

svn commit: r907018 - in /tomcat/trunk/java/org/apache/catalina: CatalinaFactory.java Pipeline.java core/ContainerBase.java core/StandardHost.java

Author: markt
Date: Fri Feb  5 17:53:29 2010
New Revision: 907018

URL: http://svn.apache.org/viewvc?rev=907018&view=rev
Log:
Remainder of Pipeline clean up. The Pipeline interface is now used in place of StandardPipeline throughout the code base.

Added:
    tomcat/trunk/java/org/apache/catalina/CatalinaFactory.java   (with props)
Modified:
    tomcat/trunk/java/org/apache/catalina/Pipeline.java
    tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java
    tomcat/trunk/java/org/apache/catalina/core/StandardHost.java

Added: tomcat/trunk/java/org/apache/catalina/CatalinaFactory.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/CatalinaFactory.java?rev=907018&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/CatalinaFactory.java (added)
+++ tomcat/trunk/java/org/apache/catalina/CatalinaFactory.java Fri Feb  5 17:53:29 2010
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.catalina;
+
+import org.apache.catalina.core.StandardPipeline;
+
+/**
+ * Factory class used whenever a default implementation of a component is
+ * required. It provides both class names (for the digester) and objects for
+ * other components.  The current implementation is as simple as possible. If
+ * there is demand it can be extended to support alternative factories and/or
+ * alternative defaults.
+ * 
+ * TODO: Create the other standard components via this factory
+ */
+public class CatalinaFactory {
+    
+    private static CatalinaFactory factory = new CatalinaFactory();
+    
+    public static CatalinaFactory getFactory() {
+        return factory;
+    }
+    
+    private CatalinaFactory() {
+        // Hide the default constructor
+    }
+    
+    public String getDefaultPipelineClassName() {
+        return StandardPipeline.class.getName();
+    }
+
+    public Pipeline createPipeline(Container container) {
+        Pipeline pipeline = new StandardPipeline();
+        pipeline.setContainer(container);
+        return pipeline;
+    }
+}

Propchange: tomcat/trunk/java/org/apache/catalina/CatalinaFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: tomcat/trunk/java/org/apache/catalina/Pipeline.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Pipeline.java?rev=907018&r1=907017&r2=907018&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Pipeline.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Pipeline.java Fri Feb  5 17:53:29 2010
@@ -80,6 +80,10 @@
      * be associated with this Container, or <code>IllegalStateException</code>
      * if it is already associated with a different Container.</p>
      *
+     * <p>Implementation note: Implementations are expected to trigger the
+     * {@link Container#ADD_VALVE_EVENT} for the associated container if this
+     * call is successful.</p>
+     * 
      * @param valve Valve to be added
      *
      * @exception IllegalArgumentException if this Container refused to
@@ -106,6 +110,10 @@
      * found and removed, the Valve's <code>setContainer(null)</code> method
      * will be called if it implements <code>Contained</code>.
      *
+     * <p>Implementation note: Implementations are expected to trigger the
+     * {@link Container#REMOVE_VALVE_EVENT} for the associated container if this
+     * call is successful.</p>
+     *
      * @param valve Valve to be removed
      */
     public void removeValve(Valve valve);
@@ -124,4 +132,17 @@
     public boolean isAsyncSupported();
 
 
+    /**
+     * Return the Container with which this Pipeline is associated.
+     */
+    public Container getContainer();
+
+
+    /**
+     * Set the Container with which this Pipeline is associated.
+     *
+     * @param container The new associated container
+     */
+    public void setContainer(Container container);
+
 }

Modified: tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java?rev=907018&r1=907017&r2=907018&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java Fri Feb  5 17:53:29 2010
@@ -36,6 +36,7 @@
 import javax.naming.directory.DirContext;
 import javax.servlet.ServletException;
 
+import org.apache.catalina.CatalinaFactory;
 import org.apache.catalina.Cluster;
 import org.apache.catalina.Container;
 import org.apache.catalina.ContainerEvent;
@@ -229,7 +230,8 @@
     /**
      * The Pipeline object with which this Container is associated.
      */
-    protected Pipeline pipeline = new StandardPipeline(this);
+    protected Pipeline pipeline =
+        CatalinaFactory.getFactory().createPipeline(this);
 
 
     /**
@@ -1216,10 +1218,6 @@
         pipeline.addValve(valve);
     }
 
-    public ObjectName[] getValveObjectNames() {
-        return ((StandardPipeline)pipeline).getValveObjectNames();
-    }
-
 
     /**
      * Execute a periodic task, such as reloading, etc. This method will be

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardHost.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardHost.java?rev=907018&r1=907017&r2=907018&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardHost.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardHost.java Fri Feb  5 17:53:29 2010
@@ -128,11 +128,6 @@
         "org.apache.catalina.valves.ErrorReportValve";
 
     /**
-     * The object name for the errorReportValve.
-     */
-    private ObjectName errorReportValveObjectName = null;
-
-    /**
      * The descriptive information string for this implementation.
      */
     private static final String info =
@@ -742,19 +737,19 @@
             && (!errorReportValveClass.equals(""))) {
             try {
                 boolean found = false;
-                if(errorReportValveObjectName != null) {
-                    ObjectName[] names = 
-                        ((StandardPipeline)pipeline).getValveObjectNames();
-                    for (int i=0; !found && i<names.length; i++)
-                        if(errorReportValveObjectName.equals(names[i]))
-                            found = true ;
-                    }
-                    if(!found) {          	
-                        Valve valve = (Valve) Class.forName(errorReportValveClass)
-                        .newInstance();
-                        getPipeline().addValve(valve);
-                        errorReportValveObjectName = ((ValveBase)valve).getObjectName() ;
+                Valve[] valves = getPipeline().getValves();
+                for (Valve valve : valves) {
+                    if (errorReportValveClass.equals(
+                            valve.getClass().getName())) {
+                        found = true;
+                        break;
                     }
+                }
+                if(!found) {          	
+                    Valve valve = (Valve) Class.forName(errorReportValveClass).
+                            newInstance();
+                    getPipeline().addValve(valve);
+                }
             } catch (Throwable t) {
                 log.error(sm.getString
                     ("standardHost.invalidErrorReportValveClass", 



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


Re: svn commit: r907018 - in /tomcat/trunk/java/org/apache/catalina: CatalinaFactory.java Pipeline.java core/ContainerBase.java core/StandardHost.java

Posted by Mark Thomas <ma...@apache.org>.
On 05/02/2010 17:53, markt@apache.org wrote:
> Author: markt
> Date: Fri Feb  5 17:53:29 2010
> New Revision: 907018
> 
> URL: http://svn.apache.org/viewvc?rev=907018&view=rev
> Log:
> Remainder of Pipeline clean up. The Pipeline interface is now used in place of StandardPipeline throughout the code base.

My plan / hope / wish for Tomcat 7 is to do similar clean up for the
other components so we consistently use interfaces rather than
implementations throughout with the intention of making it easier to
embed / extend Tomcat.

Pipeline was one of the easiest components to clean-up. Some of them may
take a fair amount of unpicking. I'm not going to do this in one big
commit. I'll do it bit by bit as I get a few spare minutes (like now
when my flight is delayed).

As always, help (committers) or patches (contributors) welcome.

Mark

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