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