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/12/07 01:08:38 UTC

svn commit: r1042873 - in /tomcat/trunk/java/org/apache: coyote/ coyote/ajp/ coyote/http11/ tomcat/util/net/

Author: markt
Date: Tue Dec  7 00:08:38 2010
New Revision: 1042873

URL: http://svn.apache.org/viewvc?rev=1042873&view=rev
Log:
Re-factoring in support of https://issues.apache.org/bugzilla/show_bug.cgi?id=50360
Pull up the concrete destroy() method - required a fair bit of refactoring
Pull up the abstract init() method()

Modified:
    tomcat/trunk/java/org/apache/coyote/AbstractProtocolHandler.java
    tomcat/trunk/java/org/apache/coyote/LocalStrings.properties
    tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java
    tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java
    tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java
    tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties
    tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java
    tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
    tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
    tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
    tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java

Modified: tomcat/trunk/java/org/apache/coyote/AbstractProtocolHandler.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProtocolHandler.java?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProtocolHandler.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProtocolHandler.java Tue Dec  7 00:08:38 2010
@@ -26,6 +26,7 @@ import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
 import org.apache.juli.logging.Log;
+import org.apache.tomcat.util.modeler.Registry;
 import org.apache.tomcat.util.net.AbstractEndpoint;
 import org.apache.tomcat.util.net.AbstractEndpoint.Handler;
 import org.apache.tomcat.util.res.StringManager;
@@ -332,4 +333,33 @@ public abstract class AbstractProtocolHa
     public void postDeregister() {
         // NOOP
     }
+
+
+    // ------------------------------------------------------- Lifecycle methods
+
+    // TODO Keep current state and check for invalid transitions
+
+    @Override
+    public abstract void init() throws Exception;
+
+
+    @Override
+    public final void destroy() {
+        if(getLog().isInfoEnabled()) {
+            getLog().info(sm.getString("abstractProtocolHandler.destroy",
+                    getName()));
+        }
+        try {
+            endpoint.destroy();
+        } catch (Exception e) {
+            getLog().error(sm.getString(
+                    "abstractProtocolHandler.endPointDestroyError", getName()),
+                    e);
+        }
+        
+        if( tpOname!=null )
+            Registry.getRegistry(null, null).unregisterComponent(tpOname);
+        if( rgOname != null )
+            Registry.getRegistry(null, null).unregisterComponent(rgOname);
+    }
 }

Modified: tomcat/trunk/java/org/apache/coyote/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/LocalStrings.properties?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/coyote/LocalStrings.properties Tue Dec  7 00:08:38 2010
@@ -15,5 +15,7 @@
 
 abstractProtocolHandler.getAttribute=Get attribute [{0}] with value [{1}]
 abstractProtocolHandler.setAttribute=Set attribute [{0}] with value [{1}]
+abstractProtocolHandler.endPointDestroyError=Failed to destroy end point associated with ProtocolHandler [{0}]
+abstractProtocolHandler.destroy=Destroying ProtocolHandler [{0}]
 
 asyncStateMachine.invalidAsyncState=Calling [{0}] is not valid for a request with Async state [{1}]

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java Tue Dec  7 00:08:38 2010
@@ -17,7 +17,6 @@
 package org.apache.coyote.ajp;
 
 import org.apache.coyote.AbstractProtocolHandler;
-import org.apache.tomcat.util.modeler.Registry;
 import org.apache.tomcat.util.res.StringManager;
 
 public abstract class AbstractAjpProtocol extends AbstractProtocolHandler {
@@ -114,16 +113,4 @@ public abstract class AbstractAjpProtoco
         if (getLog().isInfoEnabled())
             getLog().info(sm.getString("ajpprotocol.stop", getName()));
     }
-
-
-    @Override
-    public void destroy() throws Exception {
-        if (getLog().isInfoEnabled())
-            getLog().info(sm.getString("ajpprotocol.destroy", getName()));
-        endpoint.destroy();
-        if (tpOname!=null)
-            Registry.getRegistry(null, null).unregisterComponent(tpOname);
-        if (rgOname != null)
-            Registry.getRegistry(null, null).unregisterComponent(rgOname);
-    }
 }

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java Tue Dec  7 00:08:38 2010
@@ -151,10 +151,6 @@ public class AjpAprProtocol extends Abst
         protected AjpAprProtocol proto;
         protected AtomicLong registerCount = new AtomicLong(0);
         protected RequestGroupInfo global = new RequestGroupInfo();
-        @Override
-        public RequestGroupInfo getGlobal() {
-            return global;
-        }
 
         protected ConcurrentHashMap<SocketWrapper<Long>, AjpAprProcessor> connections =
             new ConcurrentHashMap<SocketWrapper<Long>, AjpAprProcessor>();
@@ -203,6 +199,16 @@ public class AjpAprProtocol extends Abst
             this.proto = proto;
         }
 
+        @Override
+        public RequestGroupInfo getGlobal() {
+            return global;
+        }
+
+        @Override
+        public void recycle() {
+            recycledProcessors.clear();
+        }
+        
         // FIXME: Support for this could be added in AJP as well
         @Override
         public SocketState event(SocketWrapper<Long> socket, SocketStatus status) {

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java Tue Dec  7 00:08:38 2010
@@ -140,10 +140,6 @@ public class AjpProtocol extends Abstrac
         protected AjpProtocol proto;
         protected AtomicLong registerCount = new AtomicLong(0);
         protected RequestGroupInfo global = new RequestGroupInfo();
-        @Override
-        public RequestGroupInfo getGlobal() {
-            return global;
-        }
 
         protected ConcurrentHashMap<SocketWrapper<Socket>, AjpProcessor> connections =
             new ConcurrentHashMap<SocketWrapper<Socket>, AjpProcessor>();
@@ -193,6 +189,16 @@ public class AjpProtocol extends Abstrac
         }
         
         @Override
+        public RequestGroupInfo getGlobal() {
+            return global;
+        }
+
+        @Override
+        public void recycle() {
+            recycledProcessors.clear();
+        }
+        
+        @Override
         public SocketState process(SocketWrapper<Socket> socket) {
             return process(socket,SocketStatus.OPEN);
         }

Modified: tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties Tue Dec  7 00:08:38 2010
@@ -23,7 +23,6 @@
 # AjpAprProtocol
 #
 
-ajpprotocol.destroy=Destroying Coyote AJP/1.3 on {0}
 ajpprotocol.endpoint.initerror=Error initializing endpoint
 ajpprotocol.endpoint.starterror=Error starting endpoint
 ajpprotocol.endpoint.stoperror=Error stopping endpoint

Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java Tue Dec  7 00:08:38 2010
@@ -17,7 +17,6 @@
 package org.apache.coyote.http11;
 
 import org.apache.coyote.AbstractProtocolHandler;
-import org.apache.tomcat.util.modeler.Registry;
 import org.apache.tomcat.util.res.StringManager;
 
 public abstract class AbstractHttp11Protocol extends AbstractProtocolHandler {
@@ -195,9 +194,6 @@ public abstract class AbstractHttp11Prot
     // ------------------------------------------------------- Lifecycle methods
     
     @Override
-    public abstract void init() throws Exception;
-
-    @Override
     public void pause() throws Exception {
         try {
             endpoint.pause();
@@ -235,17 +231,4 @@ public abstract class AbstractHttp11Prot
         if(getLog().isInfoEnabled())
             getLog().info(sm.getString("http11protocol.stop", getName()));
     }
-
-    @Override
-    public void destroy() throws Exception {
-        if(getLog().isInfoEnabled())
-            getLog().info(sm.getString("http11protocol.destroy", getName()));
-        endpoint.destroy();
-        if( tpOname!=null )
-            Registry.getRegistry(null, null).unregisterComponent(tpOname);
-        if( rgOname != null )
-            Registry.getRegistry(null, null).unregisterComponent(rgOname);
-    }
-    
-
 }

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java Tue Dec  7 00:08:38 2010
@@ -123,12 +123,6 @@ public class Http11AprProtocol extends A
             log.info(sm.getString("http11protocol.start", getName()));
     }
 
-    @Override
-    public void destroy() throws Exception {
-        cHandler.recycledProcessors.clear();
-        super.destroy();
-    }
-
     private Http11ConnectionHandler cHandler;
 
     public boolean getUseSendfile() { return ((AprEndpoint)endpoint).getUseSendfile(); }
@@ -245,13 +239,10 @@ public class Http11AprProtocol extends A
         protected Http11AprProtocol proto;
         protected AtomicLong registerCount = new AtomicLong(0);
         protected RequestGroupInfo global = new RequestGroupInfo();
-        @Override
-        public RequestGroupInfo getGlobal() {
-            return global;
-        }
         
         protected ConcurrentHashMap<SocketWrapper<Long>, Http11AprProcessor> connections =
             new ConcurrentHashMap<SocketWrapper<Long>, Http11AprProcessor>();
+
         protected ConcurrentLinkedQueue<Http11AprProcessor> recycledProcessors = 
             new ConcurrentLinkedQueue<Http11AprProcessor>() {
             private static final long serialVersionUID = 1L;
@@ -298,6 +289,16 @@ public class Http11AprProtocol extends A
         }
 
         @Override
+        public RequestGroupInfo getGlobal() {
+            return global;
+        }
+        
+        @Override
+        public void recycle() {
+            recycledProcessors.clear();
+        }
+        
+        @Override
         public SocketState event(SocketWrapper<Long> socket, SocketStatus status) {
             Http11AprProcessor processor = connections.get(socket);
             

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java Tue Dec  7 00:08:38 2010
@@ -207,13 +207,10 @@ public class Http11NioProtocol extends A
         protected Http11NioProtocol proto;
         protected static int count = 0;
         protected RequestGroupInfo global = new RequestGroupInfo();
-        @Override
-        public RequestGroupInfo getGlobal() {
-            return global;
-        }
 
         protected ConcurrentHashMap<NioChannel, Http11NioProcessor> connections =
             new ConcurrentHashMap<NioChannel, Http11NioProcessor>();
+
         protected ConcurrentLinkedQueue<Http11NioProcessor> recycledProcessors = new ConcurrentLinkedQueue<Http11NioProcessor>() {
             private static final long serialVersionUID = 1L;
             protected AtomicInteger size = new AtomicInteger(0);
@@ -258,7 +255,12 @@ public class Http11NioProtocol extends A
         }
         
         @Override
-        public void releaseCaches() {
+        public RequestGroupInfo getGlobal() {
+            return global;
+        }
+
+        @Override
+        public void recycle() {
             recycledProcessors.clear();
         }
         

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java Tue Dec  7 00:08:38 2010
@@ -159,14 +159,8 @@ public class Http11Protocol extends Abst
     }
 
 
-    @Override
-    public void destroy() throws Exception {
-        cHandler.recycledProcessors.clear();
-        super.destroy();
-    }
     // ------------------------------------------------------------- Properties
 
-
     /**
      * Name of the socket factory.
      */
@@ -191,10 +185,6 @@ public class Http11Protocol extends Abst
         protected Http11Protocol proto;
         protected AtomicLong registerCount = new AtomicLong(0);
         protected RequestGroupInfo global = new RequestGroupInfo();
-        @Override
-        public RequestGroupInfo getGlobal() {
-            return global;
-        }
             
         protected ConcurrentHashMap<SocketWrapper<Socket>, Http11Processor> connections =
             new ConcurrentHashMap<SocketWrapper<Socket>, Http11Processor>();
@@ -244,6 +234,16 @@ public class Http11Protocol extends Abst
         }
 
         @Override
+        public RequestGroupInfo getGlobal() {
+            return global;
+        }
+
+        @Override
+        public void recycle() {
+            recycledProcessors.clear();
+        }
+
+        @Override
         public SocketState process(SocketWrapper<Socket> socket) {
             return process(socket,SocketStatus.OPEN);
         }

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java Tue Dec  7 00:08:38 2010
@@ -76,7 +76,7 @@ public abstract class AbstractEndpoint {
 
     public static interface Handler {
         /**
-         * Different types of socket states to react upon
+         * Different types of socket states to react upon.
          */
         public enum SocketState {
             OPEN, CLOSED, LONG, ASYNC_END
@@ -84,9 +84,15 @@ public abstract class AbstractEndpoint {
         
 
         /**
-         * Obtain the GlobalRequestProcessor associated with the handler
+         * Obtain the GlobalRequestProcessor associated with the handler.
          */
         public RequestGroupInfo getGlobal();
+        
+        
+        /**
+         * Recycle resources associated with the handler.
+         */
+        public void recycle();
     }
 
     // Standard SSL Configuration attributes

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Tue Dec  7 00:08:38 2010
@@ -690,6 +690,8 @@ public class AprEndpoint extends Abstrac
             rootPool = 0;
         }
 
+        handler.recycle();
+
         initialized = false;
     }
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java Tue Dec  7 00:08:38 2010
@@ -466,6 +466,7 @@ public class JIoEndpoint extends Abstrac
             }
             serverSocket = null;
         }
+        handler.recycle();
         initialized = false ;
     }
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1042873&r1=1042872&r2=1042873&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Tue Dec  7 00:08:38 2010
@@ -427,7 +427,7 @@ public class NioEndpoint extends Abstrac
         this.keyCache.clear();
         this.nioChannels.clear();
         this.processorCache.clear();
-        if ( handler != null ) handler.releaseCaches();
+        if ( handler != null ) handler.recycle();
         
     }
     
@@ -1478,7 +1478,6 @@ public class NioEndpoint extends Abstrac
     public interface Handler extends AbstractEndpoint.Handler {
         public SocketState process(NioChannel socket);
         public SocketState event(NioChannel socket, SocketStatus status);
-        public void releaseCaches();
         public void release(NioChannel socket);
         public void release(SocketChannel socket);
     }



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