Asynchrone Verarbeitung

Sie können das asynchrone Verarbeitungsverfahren in JAX-RS 2.0 verwenden, um Threads zu verarbeiten. Die asynchrone Verarbeitung wird sowohl von der Client-API als auch von der Server-API unterstützt. Weitere Informationen zur asynchronen Verarbeitung in Client- und Server-APIs finden Sie in Kapitel 8 von JSR 339: JAX-RS 2.0: The Java API for RESTful Web Services (der "Spezifikation").

Die folgenden beiden Beispiele zeigen die asynchrone Verarbeitung in den Client- und Server-APIs:
  • Asynchrone Verarbeitung in der Client-API:
    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) { 
                  // Aktionen ausführen...
               }       
              @Override
               public void failed(Throwable throwable) {
                  // Fehler verarbeiten
               } 
    }); 
  • Asynchrone Verarbeitung in der Server-API:
    @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");		    
    	         }
    }
Die JAX-RS-2.0-Implementierung in Liberty unterstützt EJB und die Verwendung von statusunabhängigen und Singleton-Session-Beans als Stammressourcenklassen. Wenn eine EJB-Methode mit der Annotation @Asynchronous versehen ist, ordnet der EJB-Container automatisch die erforderlichen Ressourcen für die Ausführung der Methode zu. In diesem Szenario ist es somit nicht notwendig, ein Steuerprogramm zum Generieren einer asynchronen Antwort zu verwenden. Beispiel:
@Stateless
@Path("/")
class EJBResource {

	@GET @Asynchronous
	public void longRunningOp(@Suspended AsyncResponse ar) {
		executeLongRunningOp();
		ar.resume("Hello async world!");
	}
}
Ein explizites Thread-Management ist in diesem Fall nicht nötig, weil es vom EJB-Container gesteuert wird. Die Antwort wird erzeugt, indem für die injizierte AsyncResponse "resume" aufgerufen wird. Der Rückgabetyp von longRunningOp ist daher "void".

Symbol das den Typ des Artikels anzeigt. Referenzartikel

Nutzungsbedingungen für Information Center | Feedback


Symbol für Zeitmarke Letzte Aktualisierung: 26.04.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=rwlp_jaxrs2.0_asyn
Dateiname: rwlp_jaxrs2.0_asyn.html