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

Reply via email to