Author: remy.maucherat(a)jboss.com
Date: 2009-11-04 20:55:20 -0500 (Wed, 04 Nov 2009)
New Revision: 1242
Modified:
trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
trunk/java/org/apache/catalina/connector/LocalStrings.properties
trunk/java/org/apache/catalina/connector/Request.java
trunk/java/org/apache/catalina/core/LocalStrings.properties
trunk/java/org/apache/catalina/core/StandardWrapperValve.java
Log:
- Event does not call back when going out of a regular service() and event mode is already
gone,
so should call AsyncListener.onComplete there.
- Fix no arg AsyncContext.dispatch().
- Fix error messages.
Modified: trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
===================================================================
--- trunk/java/org/apache/catalina/connector/CoyoteAdapter.java 2009-11-05 01:00:27 UTC
(rev 1241)
+++ trunk/java/org/apache/catalina/connector/CoyoteAdapter.java 2009-11-05 01:55:20 UTC
(rev 1242)
@@ -47,10 +47,15 @@
package org.apache.catalina.connector;
import java.io.IOException;
+import java.util.Iterator;
+import javax.servlet.AsyncEvent;
+import javax.servlet.AsyncListener;
+
import org.apache.catalina.Context;
import org.apache.catalina.Globals;
import org.apache.catalina.Wrapper;
+import org.apache.catalina.connector.Request.AsyncListenerRegistration;
import org.apache.catalina.util.StringManager;
import org.apache.catalina.util.URLEncoder;
import org.apache.coyote.ActionCode;
@@ -365,6 +370,20 @@
res.action(ActionCode.ACTION_EVENT_BEGIN, null);
event = true;
}
+ } else if (request.getAsyncContext() != null) {
+ // The AC was closed right away, so call onComplete as no event
callback
+ // will occur in that case
+ Request.AsyncContextImpl asyncContext = (Request.AsyncContextImpl)
request.getAsyncContext();
+ for (AsyncListenerRegistration asyncListenerRegistration :
asyncContext.getAsyncListeners().values()) {
+ AsyncListener asyncListener =
asyncListenerRegistration.getListener();
+ AsyncEvent asyncEvent = new AsyncEvent(asyncContext,
+ asyncListenerRegistration.getRequest(),
asyncListenerRegistration.getResponse());
+ try {
+ asyncListener.onComplete(asyncEvent);
+ } catch (Throwable t) {
+ log.error(sm.getString("coyoteAdapter.complete",
asyncListener.getClass()), t);
+ }
+ }
}
}
Modified: trunk/java/org/apache/catalina/connector/LocalStrings.properties
===================================================================
--- trunk/java/org/apache/catalina/connector/LocalStrings.properties 2009-11-05 01:00:27
UTC (rev 1241)
+++ trunk/java/org/apache/catalina/connector/LocalStrings.properties 2009-11-05 01:55:20
UTC (rev 1242)
@@ -24,6 +24,7 @@
coyoteAdapter.service=An exception or error occurred in the container during the request
processing
coyoteAdapter.read=The servlet did not read all available bytes during the processing of
the read event
+coyoteAdapter.complete=The AsyncLisnener {0} onComplete threw an exception, which will be
ignored
#
# CoyoteResponse
Modified: trunk/java/org/apache/catalina/connector/Request.java
===================================================================
--- trunk/java/org/apache/catalina/connector/Request.java 2009-11-05 01:00:27 UTC (rev
1241)
+++ trunk/java/org/apache/catalina/connector/Request.java 2009-11-05 01:55:20 UTC (rev
1242)
@@ -3030,7 +3030,7 @@
}
public AsyncContext startAsync() throws IllegalStateException {
- return startAsync(null, null);
+ return startAsync(getRequest(), getResponse().getResponse());
}
public AsyncContext startAsync(ServletRequest servletRequest,
@@ -3269,9 +3269,6 @@
}
public void setRequestAndResponse(ServletRequest servletRequest, ServletResponse
servletResponse) {
- if (servletRequest == null && response == null) {
-
- }
this.servletRequest = servletRequest;
this.servletResponse = servletResponse;
}
Modified: trunk/java/org/apache/catalina/core/LocalStrings.properties
===================================================================
--- trunk/java/org/apache/catalina/core/LocalStrings.properties 2009-11-05 01:00:27 UTC
(rev 1241)
+++ trunk/java/org/apache/catalina/core/LocalStrings.properties 2009-11-05 01:55:20 UTC
(rev 1242)
@@ -225,7 +225,7 @@
standardWrapper.waiting=Waiting for {0} instance(s) to be deallocated
standardWrapper.async.listenerError=Listener processing for servlet {0} threw exception
standardWrapper.async.runnableError=Runnable for servlet {0} threw exception
-standardWrapper.async.runnableError=Async dispatcher for servlet {0} threw exception
+standardWrapper.async.dispatchError=Async dispatcher for servlet {0} threw exception
standardWrapper.async.invalidContext=Invalid async context for servlet {0}
defaultInstanceManager.restrictedServletsResource=Restricted servlets property file not
found
Modified: trunk/java/org/apache/catalina/core/StandardWrapperValve.java
===================================================================
--- trunk/java/org/apache/catalina/core/StandardWrapperValve.java 2009-11-05 01:00:27 UTC
(rev 1241)
+++ trunk/java/org/apache/catalina/core/StandardWrapperValve.java 2009-11-05 01:55:20 UTC
(rev 1242)
@@ -653,7 +653,8 @@
asyncContext.complete();
}
} else {
- throw new
IllegalStateException(sm.getString("standardWrapper.async.invalidContext"));
+ throw new
IllegalStateException(sm.getString("standardWrapper.async.invalidContext",
+ getContainer().getName()));
}
}