cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Beryozkin <sberyoz...@gmail.com>
Subject Re: CXF Continuations Not Portable Issue
Date Mon, 26 Nov 2012 20:03:02 GMT
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<sberyozkin@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
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>

Mime
View raw message