Hi
On 14/05/13 17:21, Marco Zapata wrote:
Hello,

I'm currently trying to implement an async REST  service,  but I'm having
trouble getting it to work.

I was using the "@UseAsyncMethod", but the when I call the service from the
AsyncClient, the service only does the synchronous logic.

@UseAsyncMethod is a CXF specific annotation which is not recognized yet by the JAX-RS runtime, please watch:

https://issues.apache.org/jira/browse/CXF-4995

We will get it supported for JAX-RS server/client runtimes as well.

That said, please consider using JAX-RS 2.0 AsyncResponse,

https://jax-rs-spec.java.net/nonav/2.0-SNAPSHOT/apidocs/javax/ws/rs/container/AsyncResponse.html

see the test server code here:
http://svn.apache.org/repos/asf/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookContinuationStore.java

(supported from CXF 2.7.x & on the trunk).

I also recommend using CXF WebClient to JAX-RS 2.0 AsyncInvoker bridge,
do WebClient.create("http://someaddress";).async() and start using AsyncInvoker:

https://jax-rs-spec.java.net/nonav/2.0-SNAPSHOT/apidocs/javax/ws/rs/client/AsyncInvoker.html

2.0 Client API will be completely supported for CXF 3.0

HTH, Sergey


I was wondering if you have and example on How to the the async service on
REST


My service look like

@UseAsyncMethod
@Override
public Device getDevice(int orderID) {
  LOG.info("Executing operation getOrder synchronously");
Order o = new Order();
   //ORder Logic
return o;
}


public Future<?>  getOrderAsync( final int  orderID) {
  LOG.info("Executing operation greetMeSometimeAsync asynchronously\n");
final AsyncHandler<Order>  asyncHandler = new AsyncHandler<Order>() {

@Override
public void handleResponse(Response<Order>  res) {
// TODO Auto-generated method stub
LOG.info("handling");
}
};
  final ServerAsyncResponse<Device>  r = new ServerAsyncResponse<Order>();
new Thread() {
public void run() {
Order resp = new Order ();
resp.setId(1);
resp.setName("Im async");
   r.set(resp);
  try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
  LOG.info("Responding on background thread\n");
asyncHandler.handleResponse(r);
}
}.start();

return r;
}


Thanks in advance for you help.

Regards

Marco Zapata



Reply via email to