Hi Dan
On 26/11/12 19:49, Daniel Kulp wrote:
Any idea if something as simple as:
void startAsyncAgain() {
AsyncContext old = context;
try {
context = req.startAsync();
} catch (IllegalStateException ex) {
context = old;
}
context.addListener(this);
}
or similar would allow it to work for both JBoss and the other engines?
Should help with getting it working with JBossWeb, I'd probably move
context.addListener(this); inside the try/catch block as it might also
upset JBossWeb.
As far as CXF JAX-RS is concerned, I guess if the engine throws ISE then
most likely the suspended AsyncResponse won't work, given that without
having startAsync() on every continuation retrieval I have the Servlet3
test involving multiple retries failing with both Tomcat & Jetty based
implementations.
However it is not a problem for CXF JAX-RS to get it working with
JBossWeb :-) and I thought I saw Bill not insisting on RestEasy working
with JBossWeb (for its async support), so the fix should be OK from this
point of view and it can help I guess with the managed (at the runtime
level only) continuation support
Thanks, Sergey
Dan
On Nov 26, 2012, at 10:58 AM, Sergey Beryozkin<sberyoz...@gmail.com> wrote:
Hi Richard
On 26/11/12 15:05, Richard Opalka wrote:
Hi Sergey,
On 11/26/2012 02:57 PM, Richard Opalka wrote:
Hi Sergey,
On 11/26/2012 01:31 PM, Sergey Beryozkin wrote:
Hi Richard
On 26/11/12 12:29, Richard Opalka wrote:
Hi Sergey,
On 11/26/2012 01:21 PM, Sergey Beryozkin wrote:
Hi Richard
On 26/11/12 12:15, Richard Opalka wrote:
Dear CXF developers,
I'm analyzing our recent CXF continuation related failures in CI
and I identified the following problem:
SVN commit id: 1409193
introduced
---
@@ -57,32 +57,30 @@ public class Servlet3ContinuationProvider
implements
ContinuationProvider {
if (continuation == null) {
continuation = new Servlet3Continuation();
+ } else {
+ continuation.startAsyncAgain();
}
return continuation;
}
---
method call that causes our JBossWeb to throw IllegalStateException.
According to startAsync() javadoc for Throws:
http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#startAsync%28%29
---
Throws:
IllegalStateException - if this request is within the scope of a
filter or servlet that does not support asynchronous operations (that
is, isAsyncSupported() returns false), or if this method is called
again
without any asynchronous dispatch (resulting from one of the
AsyncContext#dispatch methods), is called outside the scope of any such
dispatch, or is called again within the scope of the same dispatch, or
if the response has already been closed
---
JBossWeb is strictly following these ISE guidelines (is not lenient
like e.g. Jakarta Tomcat).
What would you say about
"Subsequent invocations of this method, or its overloaded variant, will
return the same AsyncContext instance, reinitialized as appropriate. " ?
Without this call I can not have the test doing multiple timeouts on the
same continuation working...
Makes sense to me. I had a look to our JBoss Web code again and I
noticed one suspicious line there - I'm going to discuss it with our
folks.
Oh, thanks for that, I've just sent one more follow-up, sorry about the
noise, should've waited :-)
Let's see what our Servlet experts will say -
https://issues.jboss.org/browse/JBWEB-256
Our JBoss Web guru is saying JBoss Web impl. is correct.
I'd appreciate to see more concrete clarifications, regarding the following two
points:
- the documentation clearly says that repeated calls of startAsync() return the
same instance.
- what does it mean to have called startAsync() called on the same dispatch,
does it apply to a current thread dispatch or to the whole suspended
continuation process ?
To be honest, the positive statement on the multiple startAsync calls makes me
think the ISE case applies to this method called multiple times during the same
thread dispatch...
Thanks, Sergey
Cheers, Sergey
The last issue that I identified with Servlet3ContinuationProvider is
the isNew flag has incorrect initial value - it should be *true*.
Sure - needs to be fixed
Thanks
Thanks, Sergey
Cheers,
Rio