cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Beryozkin <sberyoz...@gmail.com>
Subject Re: Async methods for JAX-RS WebClient
Date Mon, 24 Sep 2012 21:19:32 GMT
On 24/09/12 19:07, Daniel Kulp wrote:
>
> On Sep 24, 2012, at 8:31 AM, Sergey Beryozkin<sberyozkin@gmail.com>  wrote:
>
>> I went ahead and populated AsyncInvoker, as well as added another shortcut directly
to WebClient, to support an async post call.
>>
>> Dan, have a look please,
>
> That all looks great.  Thanks for filling in all the other methods.  :-)

Cool, thanks for making it easy to do that...

Sergey

>
> Dan
>
>
>
>>
>> One thing that I can have a look later is making sure the retry calls work in case
of async call failures, plus add few more minor enhancements, overall though it seems it looks
OK
>>
>> Thanks, Sergey
>>
>>
>>
>> On 23/09/12 18:56, Sergey Beryozkin wrote:
>>> On 23/09/12 18:14, Sergey Beryozkin wrote:
>>>> Hi Dan
>>>> On 21/09/12 19:27, Daniel Kulp wrote:
>>>>>
>>>>> Sergey, (and others)
>>>>>
>>>>> I just committed some initial support for some async methods to the
>>>>> WebClient. Can you take a look at that change and make sure it all
>>>>> makes sense? I only have a "get" method in there right now, but it
>>>>> should be fairly trivial now to add the others that would map to the
>>>>> new doInvokeAsync method. Just want to make sure it looks ok first.
>>>>>
>>>> It is a very good start, thanks for starting to look into it. I think I
>>>> will push some of the code to AbstractClient once I get a better
>>>> understanding of what is going on, for proxies to get the async support
>>>> too.
>>>>
>>>> Other than that, I wonder if we should introduce an "async()" method
>>>> which would return
>>>>
>>>> http://jax-rs-spec.java.net/nonav/2.0-SNAPSHOT/apidocs/javax/ws/rs/client/AsyncInvoker.html
>>>>
>>>>
>>>>
>>>> that would let us support the async style of invocation completely in
>>>> line with the way JAX-RS 2.0 does it, example:
>>>>
>>>> WebClient wc = WebClient.create("address");
>>>> wc.async().get(callback); // etc
>>>>
>>>> (async() in JAX-RS 2.0 is in
>>>> http://jax-rs-spec.java.net/nonav/2.0-SNAPSHOT/apidocs/javax/ws/rs/clisystests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.javaent/Invocation.Builder.html)
>>>>
>>>>
>>>
>>> I added an empty AsyncInvoker implementation, with
>>> async().get(InvocationCallback) also working for now :-).
>>>
>>> Wow, it's really happening thanks to the addition of the HTTP async
>>> transport :-)
>>>
>>> Thanks, Sergey
>>>
>>>>
>>>> In addition to that we can indeed add simple shortcuts, one per every
>>>> main method, or for those which are more likely to participate in async
>>>> flows, say for get/post/put, to let users 'save' on typing 'async()' for
>>>> few mainstream cases
>>>>
>>>>> I'm a little concerned about the "state" objects in the WebClient. I
>>>>> assume WebClients aren't supposed to be thread safe (that's OK).
>>>>> However, can a WebClient be used to make multiple calls? What would
>>>>> you expect in the case where a WebClient makes multiple async calls?
>>>>>
>>>> By default WebClient is not thread safe, but the thread-safety can be
>>>> activated by a threadSafe flag, it can be set on the client factory
>>>> bean, or passed to a WebClient factory method. Have a look please at
>>>> JAXRSMultithreadedClientTest. A thread-local map is then used to keep a
>>>> per-invocation state.
>>>> WebClient keeps the state because it emulates the 'browsing' process, so
>>>> at any moment it (a single instance) can move back or forward - but that
>>>> requires an extra support for the thread safety. 2.0 client interface is
>>>> different, no 'browsing' style is there, so it may be much simpler to
>>>> deal with the thread safety, I'll fond out soon once I start
>>>> implementing it :-)
>>>>
>>>> Cheers, Sergey
>>>
>>
>>
>


Mime
View raw message