You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ni...@apache.org on 2011/02/25 13:03:01 UTC
svn commit: r1074489 - in /cxf/trunk/rt/transports:
http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/
http/src/main/java/org/apache/cxf/transport/http/
http/src/main/java/org/apache/cxf/transport/servlet/
Author: ningjiang
Date: Fri Feb 25 12:03:00 2011
New Revision: 1074489
URL: http://svn.apache.org/viewvc?rev=1074489&view=rev
Log:
CXF-3362 Updated the continuation wrapper to support servlet3 async API better
Modified:
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationWrapper.java
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Servlet3ContinuationProvider.java
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java
Modified: cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationWrapper.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationWrapper.java?rev=1074489&r1=1074488&r2=1074489&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationWrapper.java (original)
+++ cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/continuations/JettyContinuationWrapper.java Fri Feb 25 12:03:00 2011
@@ -44,14 +44,15 @@ public class JettyContinuationWrapper im
Message m) {
req = (Request)request;
message = m;
- isNew = !req.isAsyncStarted();
+ isNew = req.getAttribute(AbstractHTTPDestination.CXF_CONTINUATION_MESSAGE) == null;
if (isNew) {
req.setAttribute(AbstractHTTPDestination.CXF_CONTINUATION_MESSAGE,
message.getExchange().getInMessage());
context = req.startAsync(req, resp);
context.addContinuationListener(this);
+ req.setAttribute(AbstractHTTPDestination.CXF_ASYNC_CONTEXT, context);
} else {
- context = req.getAsyncContext();
+ context = (AsyncContext)req.getAttribute(AbstractHTTPDestination.CXF_ASYNC_CONTEXT);
}
}
Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java?rev=1074489&r1=1074488&r2=1074489&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java Fri Feb 25 12:03:00 2011
@@ -93,6 +93,7 @@ public abstract class AbstractHTTPDestin
public static final String RESPONSE_COMMITED = "http.response.done";
public static final String REQUEST_REDIRECTED = "http.request.redirected";
public static final String CXF_CONTINUATION_MESSAGE = "cxf.continuation.message";
+ public static final String CXF_ASYNC_CONTEXT = "cxf.async.context";
public static final String SERVICE_REDIRECTION = "http.service.redirection";
@@ -330,11 +331,10 @@ public abstract class AbstractHTTPDestin
}
return retrieveFromServlet3Async(req);
}
+
protected Message retrieveFromServlet3Async(HttpServletRequest req) {
try {
- if (req.isAsyncStarted()) {
- return (Message)req.getAttribute(CXF_CONTINUATION_MESSAGE);
- }
+ return (Message)req.getAttribute(CXF_CONTINUATION_MESSAGE);
} catch (Throwable ex) {
// the request may not implement the Servlet3 API
}
Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Servlet3ContinuationProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Servlet3ContinuationProvider.java?rev=1074489&r1=1074488&r2=1074489&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Servlet3ContinuationProvider.java (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Servlet3ContinuationProvider.java Fri Feb 25 12:03:00 2011
@@ -38,6 +38,7 @@ public class Servlet3ContinuationProvide
HttpServletRequest req;
HttpServletResponse resp;
Message inMessage;
+ Servlet3Continuation continuation;
public Servlet3ContinuationProvider(HttpServletRequest req,
HttpServletResponse resp,
@@ -53,7 +54,10 @@ public class Servlet3ContinuationProvide
return null;
}
- return new Servlet3Continuation();
+ if (continuation == null) {
+ continuation = new Servlet3Continuation();
+ }
+ return continuation;
}
public class Servlet3Continuation implements Continuation, AsyncListener {
@@ -71,10 +75,12 @@ public class Servlet3ContinuationProvide
req.setAttribute(AbstractHTTPDestination.CXF_CONTINUATION_MESSAGE,
inMessage.getExchange().getInMessage());
context = req.startAsync(req, resp);
+ req.setAttribute(AbstractHTTPDestination.CXF_ASYNC_CONTEXT, context);
context.addListener(this);
} else {
- context = req.getAsyncContext();
+ context = (AsyncContext)req.getAttribute(AbstractHTTPDestination.CXF_ASYNC_CONTEXT);
}
+
}
public boolean suspend(long timeout) {
Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java?rev=1074489&r1=1074488&r2=1074489&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java Fri Feb 25 12:03:00 2011
@@ -23,11 +23,8 @@ import java.io.IOException;
import java.net.URI;
import java.util.logging.Logger;
-import javax.servlet.http.HttpServletRequest;
-
import org.apache.cxf.Bus;
import org.apache.cxf.common.logging.LogUtils;
-import org.apache.cxf.message.Message;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.http.AbstractHTTPDestination;
import org.apache.cxf.transport.http.DestinationRegistry;
@@ -62,21 +59,6 @@ public class ServletDestination extends
return LOG;
}
- protected Message retrieveFromServlet3Async(HttpServletRequest req) {
- // It looks current Servlet3 implementation request doesn't pass the isAsyncStart
- // status to the redispatched request
- try {
- if (req.isAsyncSupported()) {
- return (Message)req.getAttribute(CXF_CONTINUATION_MESSAGE);
- }
- } catch (Throwable ex) {
- // the request may not implement the Servlet3 API
- }
- return null;
- }
-
-
-
protected String getBasePath(String contextPath) throws IOException {
String address = getAddress().getAddress().getValue();