On Sep 24, 2012, at 8:31 AM, Sergey Beryozkin <[email protected]> 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 [email protected] - http://dankulp.com/blog Talend Community Coder - http://coders.talend.com
