Author: fhanik
Date: Fri Oct  9 21:52:36 2009
New Revision: 823710

URL: http://svn.apache.org/viewvc?rev=823710&view=rev
Log:
Just like filters, valves will have to be async aware in order for it to work 
properly. 

Modified:
    tomcat/trunk/java/org/apache/catalina/Pipeline.java
    tomcat/trunk/java/org/apache/catalina/Valve.java
    tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
    tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java
    tomcat/trunk/java/org/apache/catalina/core/StandardContextValve.java
    tomcat/trunk/java/org/apache/catalina/core/StandardEngineValve.java
    tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java
    tomcat/trunk/java/org/apache/catalina/core/StandardPipeline.java
    tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java
    tomcat/trunk/java/org/apache/catalina/valves/ValveBase.java
    tomcat/trunk/webapps/examples/jsp/async/index.jsp

Modified: tomcat/trunk/java/org/apache/catalina/Pipeline.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Pipeline.java?rev=823710&r1=823709&r2=823710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Pipeline.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Pipeline.java Fri Oct  9 21:52:36 2009
@@ -116,6 +116,12 @@
      * Valve for this Pipeline (if any).
      */
     public Valve getFirst();
+    
+    /**
+     * Returns true if all the valves in this pipeline support async, false 
otherwise
+     * @return true if all the valves in this pipeline support async, false 
otherwise
+     */
+    public boolean isAsyncSupported();
 
 
 }

Modified: tomcat/trunk/java/org/apache/catalina/Valve.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Valve.java?rev=823710&r1=823709&r2=823710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Valve.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Valve.java Fri Oct  9 21:52:36 2009
@@ -144,5 +144,8 @@
     public void event(Request request, Response response, CometEvent event)
         throws IOException, ServletException;
 
+    
+    public boolean isAsyncSupported();
+    
 
 }

Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?rev=823710&r1=823709&r2=823710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Fri Oct  
9 21:52:36 2009
@@ -373,6 +373,8 @@
             // request parameters
             
req.getRequestProcessor().setWorkerThreadName(Thread.currentThread().getName());
             if (postParseRequest(req, request, res, response)) {
+                //check valves if we support async
+                
request.setAsyncSupported(connector.getContainer().getPipeline().isAsyncSupported());
                 // Calling the container
                 
connector.getContainer().getPipeline().getFirst().invoke(request, response);
 

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=823710&r1=823709&r2=823710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java Fri Oct  9 
21:52:36 2009
@@ -1617,4 +1617,12 @@
     }
 
 
+    @Override
+    public boolean isAsyncSupported() {
+        return pipeline.isAsyncSupported();
+    }
+    
+    
+
+
 }

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContextValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContextValve.java?rev=823710&r1=823709&r2=823710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardContextValve.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardContextValve.java Fri 
Oct  9 21:52:36 2009
@@ -187,7 +187,9 @@
                 }
             }
         }
-
+        if (request.isAsyncSupported()) {
+            
request.setAsyncSupported(wrapper.getPipeline().isAsyncSupported());
+        }
         wrapper.getPipeline().getFirst().invoke(request, response);
 
         if ((instances !=null ) &&

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardEngineValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardEngineValve.java?rev=823710&r1=823709&r2=823710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardEngineValve.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardEngineValve.java Fri Oct 
 9 21:52:36 2009
@@ -104,6 +104,9 @@
                               request.getServerName()));
             return;
         }
+        if (request.isAsyncSupported()) {
+            request.setAsyncSupported(host.getPipeline().isAsyncSupported());
+        }
 
         // Ask this Host to process this request
         host.getPipeline().getFirst().invoke(request, response);

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java?rev=823710&r1=823709&r2=823710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java Fri Oct  
9 21:52:36 2009
@@ -123,6 +123,10 @@
             Thread.currentThread().setContextClassLoader
                     (context.getLoader().getClassLoader());
         }
+        if (request.isAsyncSupported()) {
+            
request.setAsyncSupported(context.getPipeline().isAsyncSupported());
+        }
+
 
         // Ask this Context to process this request
         context.getPipeline().getFirst().invoke(request, response);

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardPipeline.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardPipeline.java?rev=823710&r1=823709&r2=823710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardPipeline.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardPipeline.java Fri Oct  9 
21:52:36 2009
@@ -128,8 +128,7 @@
      * The first valve associated with this Pipeline.
      */
     protected Valve first = null;
-
-
+    
     // --------------------------------------------------------- Public Methods
 
 
@@ -141,6 +140,16 @@
         return (this.info);
 
     }
+    
+    public boolean isAsyncSupported() {
+        Valve valve = (first!=null)?first:basic;
+        boolean supported = true;
+        while (supported && valve!=null) {
+            supported = supported & valve.isAsyncSupported();
+            valve = valve.getNext();
+        }
+        return supported; 
+    }
 
 
     // ------------------------------------------------------ Contained Methods
@@ -559,6 +568,4 @@
             return basic;
         }
     }
-
-
 }

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java?rev=823710&r1=823709&r2=823710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java Fri 
Oct  9 21:52:36 2009
@@ -199,7 +199,7 @@
         // Reset comet flag value after creating the filter chain
         request.setComet(false);
         //check filters to see if we support async or not.
-        if (filterChain != null) {
+        if (filterChain != null && request.isAsyncSupported()) {
             request.setAsyncSupported(filterChain.isAsyncSupported());
         }
 

Modified: tomcat/trunk/java/org/apache/catalina/valves/ValveBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/ValveBase.java?rev=823710&r1=823709&r2=823710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/ValveBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/valves/ValveBase.java Fri Oct  9 
21:52:36 2009
@@ -63,6 +63,11 @@
 
 
     /**
+     * Does this valve support async reporting
+     */
+    protected boolean asyncSupported = false;
+    
+    /**
      * The Container whose pipeline this Valve is a component of.
      */
     protected Container container = null;
@@ -97,7 +102,7 @@
 
     //-------------------------------------------------------------- Properties
 
-
+    
     /**
      * Return the Container with which this Valve is associated, if any.
      */
@@ -108,6 +113,16 @@
     }
 
 
+    public boolean isAsyncSupported() {
+        return asyncSupported;
+    }
+
+
+    public void setAsyncSupported(boolean asyncSupported) {
+        this.asyncSupported = asyncSupported;
+    }
+
+
     /**
      * Set the Container with which this Valve is associated, if any.
      *

Modified: tomcat/trunk/webapps/examples/jsp/async/index.jsp
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/jsp/async/index.jsp?rev=823710&r1=823709&r2=823710&view=diff
==============================================================================
--- tomcat/trunk/webapps/examples/jsp/async/index.jsp (original)
+++ tomcat/trunk/webapps/examples/jsp/async/index.jsp Fri Oct  9 21:52:36 2009
@@ -14,7 +14,7 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<%...@page session="false"%>
+...@page session="false"%>
 
 <pre>
 Use cases:
@@ -50,4 +50,16 @@
  - servlet does a setAsyncTimeout
  - servlet does a addAsyncListener
  - returns - waits for timeout to happen and listener invoked 
+ 
+5. Dispatch to asyncSupported=false servlet
+ - servlet1 does a startAsync()
+ - servlet1 dispatches to dispatch(/servlet2)
+ - the container calls complete() after servlet2 is complete
+ - TODO
+ 
+6. Chained dispatch
+ - servlet1 does a startAsync
+ - servlet1 does a dispatch to servlet2 (asyncsupported=true)
+ - servlet2 does a dispatch to servlet3 (asyncsupported=true)
+ - servlet3 does a dispatch to servlet4 (asyncsupported=false) 
 </pre>
\ No newline at end of file



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

Reply via email to