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 Tue, 27 Nov 2012 12:26:14 GMT
Hi Richard
On 27/11/12 08:12, Richard Opalka wrote:
> Hi Sergey,
>
> On 11/26/2012 04:58 PM, Sergey Beryozkin 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
>
> Unfortunately I'm not servlet expert :( But Remy suggested (see
> JBWEB-256 comments):
>
> 'Feel free to seek further clarification from the specification expert
> groups if you like.'

First of all, thanks for validating the proposed fix from Dan, your 
patch has been applied.

I think at the moment the only argument I have is "it works with Tomcat 
& Jetty" which is not a strong enough proof that ISE should not be 
actually reported :-), so the fix is a good compromise. I'd love to see 
the clear statement from the servlet experts, but I wonder if it is even 
possible to get them to answer :-)

Thanks, Sergey

>
> Cheers,
>
> Rio
>
>>
>>>>
>>>>>
>>>>> 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

Mime
View raw message