Proceso asíncrono
Puede utilizar la técnica de proceso asíncrono en JAX-RS 2.0 para procesar hebras. El proceso asíncrono está soportado en la API de cliente y en la API de servidor. Para obtener más información acerca del proceso asíncrono en las API de servidor y cliente, consulte el Capítulo 8 de JSR 339: JAX-RS 2.0: La API Java para los servicios web RESTful (la "Especificación").
Los dos ejemplos siguientes muestran el proceso asíncrono en las API de cliente y servidor:
- Proceso asíncrono en la API de cliente:
Client client = ClientBuilder.newClient(); WebTarget target = client.target("http://example.org/customers/{id}"); target.resolveTemplate("id", 123).request().async().get( new InvocationCallbackCustomer() { @Override public void completed(Customer customer) { // Do something } @Override public void failed(Throwable throwable) { // Process error } });
- Proceso asíncrono en la API de servidor:
@Path("/async") public class MyResource{ @GET public void getAsync(@Suspended final AsyncResponse asyncResponse){ CompletionCallback callBack = new CompletionCallback(){ @Override public void onComplete(Throwable throwable) { ... } }; asyncResponse.register(callBack); asyncResponse.resume("some Response"); } }
La implementación de JAX-RS 2.0 en Liberty da soporte a EJB y al uso de beans de
sesión sin estado y singleton como clases de recursos raíz. Cuando un método EJB se
anota con @Asynchronous, el contenedor EJB asigna automáticamente los
recursos necesarios para su ejecución. Por lo tanto, en este caso de ejemplo, no es
necesario utilizar un ejecutor para generar una respuesta asíncrona. Por ejemplo:
@Stateless
@Path("/")
class EJBResource {
@GET @Asynchronous
public void longRunningOp(@Suspended AsyncResponse ar) {
executeLongRunningOp();
ar.resume("Hello async world!");
}
}
La gestión de hebras explícita no es necesaria en este caso porque está
bajo el control del contenedor EJB. La respuesta se produce invocando la reanudación en
la AsyncResponse inyectada. Por lo tanto, el tipo de retorno de
longRunningOp está vacío.