Return-Path: Delivered-To: apmail-tomcat-dev-archive@www.apache.org Received: (qmail 31595 invoked from network); 7 Dec 2010 00:09:06 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 7 Dec 2010 00:09:06 -0000 Received: (qmail 45275 invoked by uid 500); 7 Dec 2010 00:09:05 -0000 Delivered-To: apmail-tomcat-dev-archive@tomcat.apache.org Received: (qmail 45218 invoked by uid 500); 7 Dec 2010 00:09:05 -0000 Mailing-List: contact dev-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Developers List" Delivered-To: mailing list dev@tomcat.apache.org Received: (qmail 45209 invoked by uid 99); 7 Dec 2010 00:09:05 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 07 Dec 2010 00:09:05 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 07 Dec 2010 00:09:01 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 2F401238889B; Tue, 7 Dec 2010 00:08:39 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1042873 - in /tomcat/trunk/java/org/apache: coyote/ coyote/ajp/ coyote/http11/ tomcat/util/net/ Date: Tue, 07 Dec 2010 00:08:38 -0000 To: dev@tomcat.apache.org From: markt@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101207000839.2F401238889B@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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, AjpAprProcessor> connections = new ConcurrentHashMap, 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 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, AjpProcessor> connections = new ConcurrentHashMap, 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) { 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, Http11AprProcessor> connections = new ConcurrentHashMap, Http11AprProcessor>(); + protected ConcurrentLinkedQueue recycledProcessors = new ConcurrentLinkedQueue() { 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 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 connections = new ConcurrentHashMap(); + protected ConcurrentLinkedQueue recycledProcessors = new ConcurrentLinkedQueue() { 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, Http11Processor> connections = new ConcurrentHashMap, 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) { 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