You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2011/04/23 23:27:54 UTC
svn commit: r1096235 - in /tomcat/trunk:
java/org/apache/catalina/core/AsyncContextImpl.java
test/org/apache/catalina/core/TestAsyncContextImpl.java
webapps/docs/changelog.xml
Author: markt
Date: Sat Apr 23 21:27:54 2011
New Revision: 1096235
URL: http://svn.apache.org/viewvc?rev=1096235&view=rev
Log:
Ensure response is committed when AsyncContext#complete() is called.
Modified:
tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
tomcat/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java?rev=1096235&r1=1096234&r2=1096235&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java Sat Apr 23 21:27:54 2011
@@ -80,6 +80,7 @@ public class AsyncContextImpl implements
if (log.isDebugEnabled()) {
logDebug("complete ");
}
+ request.getCoyoteRequest().action(ActionCode.COMMIT, null);
request.getCoyoteRequest().action(ActionCode.ASYNC_COMPLETE, null);
}
Modified: tomcat/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java?rev=1096235&r1=1096234&r2=1096235&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java (original)
+++ tomcat/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java Sat Apr 23 21:27:54 2011
@@ -1050,4 +1050,66 @@ public class TestAsyncContextImpl extend
assertTrue(entry.toString(), entry.getTime() < maxTime);
}
}
+
+ public void testCommitOnComplete() throws Exception {
+ // Setup Tomcat instance
+ Tomcat tomcat = getTomcatInstance();
+
+ // Must have a real docBase - just use temp
+ File docBase = new File(System.getProperty("java.io.tmpdir"));
+
+ Context ctx = tomcat.addContext("", docBase.getAbsolutePath());
+
+ AsyncStatusServlet asyncStatusServlet =
+ new AsyncStatusServlet(HttpServletResponse.SC_BAD_REQUEST);
+ Wrapper wrapper =
+ Tomcat.addServlet(ctx, "asyncStatusServlet", asyncStatusServlet);
+ wrapper.setAsyncSupported(true);
+ ctx.addServletMapping("/asyncStatusServlet", "asyncStatusServlet");
+
+ TesterAccessLogValve alv = new TesterAccessLogValve();
+ ctx.getPipeline().addValve(alv);
+
+ tomcat.start();
+
+ StringBuilder url = new StringBuilder(48);
+ url.append("http://localhost:");
+ url.append(getPort());
+ url.append("/asyncStatusServlet");
+
+ int rc = getUrl(url.toString(), new ByteChunk(), null);
+
+ assertEquals(HttpServletResponse.SC_BAD_REQUEST, rc);
+
+ // Without this test may complete before access log has a chance to log
+ // the request
+ Thread.sleep(REQUEST_TIME);
+
+ // Check the access log
+ validateAccessLog(alv, 1, HttpServletResponse.SC_BAD_REQUEST, 0,
+ REQUEST_TIME);
+
+ }
+
+ private static class AsyncStatusServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ private int status = 200;
+
+ public AsyncStatusServlet(int status) {
+ this.status = status;
+ }
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+
+ AsyncContext actxt = req.startAsync();
+ resp.setStatus(status);
+ actxt.complete();
+ }
+ }
+
+
}
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1096235&r1=1096234&r2=1096235&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Sat Apr 23 21:27:54 2011
@@ -86,6 +86,10 @@
directly. This change significantly improves startup performance for
applications with lots of JARs to be scanned. (markt)
</fix>
+ <fix>
+ Ensure response is committed when <code>AsyncContext#complete()</code>
+ is called. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org