- Calling allocate for no reason was not a very good idea (adding an accessor instead...
authorremm <remm@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 17 Aug 2006 13:22:44 +0000 (13:22 +0000)
committerremm <remm@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 17 Aug 2006 13:22:44 +0000 (13:22 +0000)
- Simplify the event method.

git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@432230 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/Wrapper.java
java/org/apache/catalina/connector/CoyoteAdapter.java
java/org/apache/catalina/core/StandardWrapper.java

index 8950c27..357cf51 100644 (file)
@@ -217,6 +217,12 @@ public interface Wrapper extends Container {
 
 
     /**
+     * Return the associated servlet instance.
+     */
+    public Servlet getServlet();
+    
+    
+    /**
      * Return the value for the specified initialization parameter name,
      * if any; otherwise return <code>null</code>.
      *
index 4b087cd..415855f 100644 (file)
@@ -19,6 +19,8 @@ package org.apache.catalina.connector;
 
 import java.io.IOException;
 
+import javax.servlet.Servlet;
+
 import org.apache.catalina.CometProcessor;
 import org.apache.catalina.Context;
 import org.apache.catalina.Globals;
@@ -117,25 +119,16 @@ public class CoyoteAdapter
 
         if (request.getWrapper() != null) {
             
+            CometProcessor servlet = null;
+
             // Bind the context CL to the current thread
             if (request.getContext().getLoader() != null ) {
                 Thread.currentThread().setContextClassLoader
                         (request.getContext().getLoader().getClassLoader());
             }
             
-            CometProcessor servlet = null;
             try {
                 servlet = (CometProcessor) request.getWrapper().allocate();
-            } catch (Throwable t) {
-                log.error(sm.getString("coyoteAdapter.service"), t);
-                request.recycle();
-                response.recycle();
-                // Restore the context classloader
-                Thread.currentThread().setContextClassLoader
-                    (CoyoteAdapter.class.getClassLoader());
-                return false;
-            }
-            try {
                 if (error) {
                     servlet.error(request.getRequest(), response.getResponse());
                 } else {
@@ -167,6 +160,11 @@ public class CoyoteAdapter
                 // Restore the context classloader
                 Thread.currentThread().setContextClassLoader
                     (CoyoteAdapter.class.getClassLoader());
+                try {
+                    request.getWrapper().deallocate((Servlet) servlet);
+                } catch (Exception e) {
+                    log.error(sm.getString("coyoteAdapter.service"), e);
+                }
                 // Recycle the wrapper request and response
                 if (error || response.isClosed()) {
                     request.recycle();
@@ -225,7 +223,7 @@ public class CoyoteAdapter
                 connector.getContainer().getPipeline().getFirst().invoke(request, response);
             }
 
-            if (request.getWrapper().allocate() instanceof CometProcessor 
+            if (request.getWrapper().getServlet() instanceof CometProcessor 
                     && !response.isClosed()) {
                 comet = true;
                 res.action(ActionCode.ACTION_COMET_BEGIN, null);
index 4c53b17..cedf300 100644 (file)
@@ -750,6 +750,14 @@ public class StandardWrapper
 
 
     /**
+     * Return the associated servlet instance.
+     */
+    public Servlet getServlet() {
+        return instance;
+    }
+    
+    
+    /**
      * Allocate an initialized instance of this Servlet that is ready to have
      * its <code>service()</code> method called.  If the servlet class does
      * not implement <code>SingleThreadModel</code>, the (only) initialized