You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2009/07/22 01:05:48 UTC
svn commit: r796575 - in /tomcat/trunk/java/org/apache/catalina/connector:
AsyncContextImpl.java Request.java
Author: fhanik
Date: Tue Jul 21 23:05:47 2009
New Revision: 796575
URL: http://svn.apache.org/viewvc?rev=796575&view=rev
Log:
Reorder the start sequence
Modified:
tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java
tomcat/trunk/java/org/apache/catalina/connector/Request.java
Modified: tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java?rev=796575&r1=796574&r2=796575&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java Tue Jul 21 23:05:47 2009
@@ -121,10 +121,24 @@
return getServletResponse();
}
- public void start(Runnable run) {
- // TODO SERVLET3 - async
- this.dispatch = run;
- request.coyoteRequest.action(ActionCode.ACTION_ASYNC_DISPATCH, null );
+ public void start(final Runnable run) {
+ if (state.compareAndSet(AsyncState.STARTED, AsyncState.DISPATCHING) ||
+ state.compareAndSet(AsyncState.DISPATCHED, AsyncState.DISPATCHING)) {
+ // TODO SERVLET3 - async
+ Runnable r = new Runnable() {
+ public void run() {
+ try {
+ run.run();
+ }catch (Exception x) {
+ log.error("Unable to run async task.",x);
+ }
+ }
+ };
+ this.dispatch = r;
+ request.coyoteRequest.action(ActionCode.ACTION_ASYNC_DISPATCH, null );
+ } else {
+ throw new IllegalStateException("Dispatch not allowed. Invalid state:"+state.get());
+ }
}
public void addAsyncListener(AsyncListener listener) {
Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=796575&r1=796574&r2=796575&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Tue Jul 21 23:05:47 2009
@@ -46,6 +46,7 @@
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
+import javax.servlet.ServletRequestWrapper;
import javax.servlet.ServletResponse;
import javax.servlet.SessionCookieConfig;
import javax.servlet.SessionTrackingMode;
@@ -1464,9 +1465,9 @@
if (!isAsyncSupported()) throw new IllegalStateException("Not supported.");
if (asyncContext==null) asyncContext = new AsyncContextImpl(this);
else if (asyncContext.isStarted()) throw new IllegalStateException("Already started.");
+ asyncContext.setStarted(getContext());
asyncContext.setServletRequest(getRequest());
asyncContext.setServletResponse(response.getResponse());
- asyncContext.setStarted(getContext());
return asyncContext;
}
@@ -1474,6 +1475,9 @@
startAsync();
asyncContext.setServletRequest(request);
asyncContext.setServletResponse(response);
+ //TODO SERVLET3 - async - need to retrieve the ServletContext here
+ //or just the webapp classloader associated with to do
+ //run with start(Runnable)
asyncContext.setHasOriginalRequestAndResponse(request==getRequest() && response==getResponse().getResponse());
return asyncContext;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org