Hi, no problems, I replied earlier, copying here just in case too:


On 25/04/13 12:45, Adar Dembo wrote:
(apologies if you're receiving this twice; the first time I sent it I
wasn't subscribed to the list, so I think it got dropped)

My application uses JAX-RS to build its external API. I think the
implementation is as you'd expect: requests are dispatched to the
appropriate resource, based on the @Path, @GET, @POST, @DELETE, etc.
annotations.

I'm trying to build a "batch" endpoint for this API. The idea is that the
endpoint would have a single resource, which, when it gets a POST, would
create a new database transaction, dispatch to a number of other endpoints,
and commit the transaction. Any dispatch failures would roll back the
transaction. The body of the POST would contain information on what to
dispatch (i.e. it'd be a list where each item is an HTTP method, a URL, and
a body).

My problem: how do I redispatch from inside my batch endpoint? I'd like to
call into CXF for each batch list item, otherwise I have to do all the
argument marshaling myself. Put another way, I want to give CXF an HTTP
method, a URL, and a body, and have it call the appropriate resource in the
appropriate way for me. How do I do that?

I think you can inject a single CXF WebClient instance [1] into the endpoint's root resource, with a 'threadSafe' flag set to 'true' and some base path set too, and then adjust it use one of its generic invoke() methods. This should be the most effective option as the actual client instance will be set up/initialized only once, though at the cost of having a thread-local map utilized on the client side.

Or you can try creating clients dynamically, example:

JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
bean.setAddress(address);
WebClient wc = bean.createWebClient();
Response r = wc.post(body);
TransactionItem item = r.readEntity(TransactionItem.class);
...

HTH, Sergey

--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to