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