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: [email protected]
For additional commands, e-mail: [email protected]