Author: fhanik
Date: Thu Aug 6 16:10:34 2009
New Revision: 801693
URL: http://svn.apache.org/viewvc?rev=801693&view=rev
Log:
Another use case
Added:
tomcat/trunk/webapps/examples/WEB-INF/classes/async/Async2.java (with
props)
Modified:
tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java
tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
tomcat/trunk/webapps/examples/WEB-INF/web.xml
tomcat/trunk/webapps/examples/jsp/async/index.jsp
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=801693&r1=801692&r2=801693&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java Thu
Aug 6 16:10:34 2009
@@ -257,6 +257,8 @@
dispatch = null;
}
}
+ } else if (this.state.get()==AsyncState.COMPLETING) {
+ doInternalComplete(false);
} else {
throw new IllegalStateException("Dispatch illegal. Invalid state:
"+state.get());
}
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=801693&r1=801692&r2=801693&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Thu Aug
6 16:10:34 2009
@@ -273,6 +273,12 @@
//configure settings for timed out
asyncConImpl.setState(AsyncContextImpl.AsyncState.TIMING_OUT);
}
+ if (status==SocketStatus.TIMEOUT) {
+ AsyncContextImpl asyncConImpl =
(AsyncContextImpl)request.getAsyncContext();
+ //TODO SERVLET3 - async
+ //configure settings for timed out
+
asyncConImpl.setState(AsyncContextImpl.AsyncState.TIMING_OUT);
+ }
connector.getContainer().getPipeline().getFirst().invoke(request, response);
}catch (RuntimeException x) {
success = false;
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=801693&r1=801692&r2=801693&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Thu Aug
6 16:10:34 2009
@@ -190,13 +190,6 @@
* Async used
*/
protected boolean async = false;
- /**
- * Closed flag, a Comet async thread can
- * signal for this Nio processor to be closed and recycled instead
- * of waiting for a timeout.
- * Closed by HttpServletRequest.getAsyncContext().complete()
- */
- protected boolean asyncClose;
/**
* Content delimitator for the request (if false, the connection will
@@ -1135,7 +1128,6 @@
comet = false;
cometClose = true;
async = false;
- asyncClose = false;
SelectionKey key =
socket.getIOChannel().keyFor(socket.getPoller().getSelector());
if ( key != null ) {
NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment)
key.attachment();
@@ -1316,7 +1308,6 @@
} else if (actionCode == ActionCode.ACTION_ASYNC_COMPLETE) {
//TODO SERVLET3 - async
AtomicBoolean dispatch = (AtomicBoolean)param;
- asyncClose = true;
RequestInfo rp = request.getRequestProcessor();
if ( rp.getStage() != org.apache.coyote.Constants.STAGE_SERVICE )
{ //async handling
dispatch.set(true);
Added: tomcat/trunk/webapps/examples/WEB-INF/classes/async/Async2.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/async/Async2.java?rev=801693&view=auto
==============================================================================
--- tomcat/trunk/webapps/examples/WEB-INF/classes/async/Async2.java (added)
+++ tomcat/trunk/webapps/examples/WEB-INF/classes/async/Async2.java Thu Aug 6
16:10:34 2009
@@ -0,0 +1,62 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package async;
+
+import java.io.IOException;
+
+import javax.servlet.AsyncContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
+
+public class Async2 extends HttpServlet {
+ protected static Log log = LogFactory.getLog(Async2.class);
+ public Async2() {
+ }
+
+ @Override
+ protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
+ final AsyncContext actx = req.startAsync();
+ actx.setAsyncTimeout(30*1000);
+ Runnable run = new Runnable() {
+ public void run() {
+ try {
+ Thread.currentThread().setName("Async2-Thread");
+ log.info("Putting AsyncThread to sleep");
+ Thread.sleep(10*1000);
+ log.info("Writing data.");
+ actx.getResponse().getWriter().write("Output from
background thread. Time:"+System.currentTimeMillis()+"\n");
+ actx.complete();
+ }catch (InterruptedException x) {
+ log.error("Async2",x);
+ }catch (IllegalStateException x) {
+ log.error("Async2",x);
+ }catch (IOException x) {
+ log.error("Async2",x);
+ }
+ }
+ };
+ Thread t = new Thread(run);
+ t.start();
+ }
+
+
+}
Propchange: tomcat/trunk/webapps/examples/WEB-INF/classes/async/Async2.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tomcat/trunk/webapps/examples/WEB-INF/web.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/web.xml?rev=801693&r1=801692&r2=801693&view=diff
==============================================================================
--- tomcat/trunk/webapps/examples/WEB-INF/web.xml (original)
+++ tomcat/trunk/webapps/examples/WEB-INF/web.xml Thu Aug 6 16:10:34 2009
@@ -312,4 +312,12 @@
<servlet-name>async1</servlet-name>
<url-pattern>/async/async1</url-pattern>
</servlet-mapping>
+ <servlet>
+ <servlet-name>async2</servlet-name>
+ <servlet-class>async.Async2</servlet-class>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>async2</servlet-name>
+ <url-pattern>/async/async2</url-pattern>
+ </servlet-mapping>
</web-app>
Modified: tomcat/trunk/webapps/examples/jsp/async/index.jsp
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/jsp/async/index.jsp?rev=801693&r1=801692&r2=801693&view=diff
==============================================================================
--- tomcat/trunk/webapps/examples/jsp/async/index.jsp (original)
+++ tomcat/trunk/webapps/examples/jsp/async/index.jsp Thu Aug 6 16:10:34 2009
@@ -13,6 +13,12 @@
- background thread calls dispatch(/path/to/jsp)
<a href="<%=response.encodeURL("/examples/async/async1")%>"> Async 1 </a>
+3. Simple dispatch
+ - servlet does startAsync()
+ - background thread calls writes and calls complete()
+ <a href="<%=response.encodeURL("/examples/async/async2")%>"> Async 2 </a>
+
+
3. Timeout s1
- servlet does a startAsync()
- servlet does a setAsyncTimeout
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]