Traitement asynchrone

Vous pouvez utiliser la technique de traitement asynchrone dans JAX-RS 2.0 pour traiter les unités d'exécution. Le traitement asynchrone est pris en charge à la fois dans l'API client et dans API serveur. Pour plus d'informations sur le traitement asynchrone dans les API Client et Server, consultez le chapitre 8 du manuel JSR 339: JAX-RS 2.0: The Java API for RESTful Web Services (la "Spécification").

Les deux exemples suivants illustrent le traitement asynchrone dans les API Client et Server :
  • Traitement asynchrone dans l'API Client :
    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 
               } 
    }); 
  • Traitement asynchrone dans l'API Server :
    @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");		    
    	         }
    }
L'implémentation de JAX-RS 2.0 dans Liberty prend en charge EJB et l'utilisation de beans de session sans état et singleton en tant que classes de ressources racines. Lorsqu'une méthode EJB est annotée avec @Asynchronous, le conteneur EJB alloue automatiquement les ressources nécessaires pour son exécution. Ainsi, dans ce scénario, il est inutile d'utiliser un programme d'exécution pour générer une réponse asynchrone. Par exemple,
@Stateless
@Path("/")
class EJBResource {

	@GET @Asynchronous
	public void longRunningOp(@Suspended AsyncResponse ar) {
		executeLongRunningOp();
		ar.resume("Hello async world!");
	}
}
La gestion des unités d'exécution explicite n'est pas nécessaire dans ce cas car cela est sous le contrôle du conteneur d'EJB. La réponse est générée par la reprise d'appel sur l'élément AsyncResponse injecté. Par conséquent, le type de retour longRunningOp est nul.

Icône indiquant le type de rubrique Rubrique de référence

Nom du fichier : rwlp_jaxrs2.0_asyn.html