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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org