cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Kulp <dk...@apache.org>
Subject Re: Async methods for JAX-RS WebClient
Date Mon, 24 Sep 2012 18:07:32 GMT

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.  :-)

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
>> 
> 
> 

-- 
Daniel Kulp
dkulp@apache.org - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com


Mime
View raw message