WSIFOperation - Referenz auf asynchrone Interaktionen
Das Web Services Invocation Framework (WSIF) unterstützt asynchrone Operationen. In dieser Betriebsart reiht der Client die Anforderungsnachricht in eine Transaktion ein und fährt mit dem Ausführungsthread fort. Die Antwortnachricht wird dann von einem anderen Thread mit einer separaten Transaktion bearbeitet.
Asynchrone Operationen werden von den WSIF-Providern für SOAP over JMS und natives JMS unterstützt.
Die Klasse "WSIFPort" verwendet die Methode "supportsAsync", um zu testen, ob asynchrone Operationen unterstützt werden.
Eine asynchrone Operation wird mit der Methode "executeRequestResponseAsync" der Schnittstelle "WSIFOperation" eingeleitet. Diese Methode unterstützt den asynchronen Aufruf von RPC-Methoden (Remote Procedure Call). Die Methode kehrt vor Abschluss der Operation zurück, und der Ausführungsthread wird fortgesetzt.
Die Antwort auf die asynchrone Anforderung wird von der Methode "fireAsyncResponse" oder "processAsyncResponse" der Schnittstelle "WSIFOperation" verarbeitet.
public WSIFCorrelationId executeRequestResponseAsync (WSIFMessage input, WSIFResponseHandler handler)
public WSIFCorrelationId executeRequestResponseAsync (WSIFMessage input)
- executeRequestResponseAsync(WSIFMessage input, WSIFResponseHandler handler)
Diese Methode unterstützt eine Eingabenachricht und einen WSIFResponseHandler. Der Handler wird nach Abschluss der Operation in einem anderen Thread aufgerufen. Wenn Sie diese Methode verwenden, ruft der Client-Listener die Methode "fireAsyncResponse" auf, die dann die Methode "executeAsyncResponse" der Schnittstelle "WSIFResponseHandler" aufruft.
- executeRequestResponseAsync(WSIFMessage input)
- Diese Methode unterstützt nur eine Eingabenachricht und verwendet keinen Antwort-Handler. Der Client-Listener ruft für die Verarbeitung der Antwort die Methode "processAsyncResponse" der Schnittstelle "WSIFOperation" auf. Auf diese Weise werden die WSIFMessage-Ausgabe und die fehlerhaften Nachrichten anhand des Anforderungsergebnisses aktualisiert.
WSIF unterstützt die Korrelation zwischen der asynchronen Anforderung und der Antwort. Wenn die Anforderung gesendet wird, wird das WSIFOperation-Objekt in das WSIFCorrelationService-Objekt serialisiert. Die Methode "executeRequestResponseAsync" gibt ein WSIFCorrelationId-Objekt zurück, das das serialisierte WSIFOperation-Objekt darstellt. Der Client-Listener kann dieses Objekt verwenden, um eine bestimmte Anforderung zu beantworten.
Der Korrelationsservice wird mit der Methode "getCorrelationService()" der Klasse "WSIFCorrelationServiceLocator" im Paket "org.apache.wsif.utils" gesucht.
In einem verwalteten Container wird ein Standardkorrelationsservice im JNDI-Standard-Namespace mit folgendem Namen definiert: java:comp/wsif/WSIFCorrelationService. Falls dieser Korrelationsservice nicht verfügbar ist, verwendet WSIF den WSIFDefaultCorrelationService.
Weitere Informationen zur Schnittstelle "WSIFCorrelationService" finden Sie in der generierten API-Dokumentation, die über WSIF bereitgestellt wird.
Die ID des Korrelationswertes ist wie folgt:
public interface WSIFCorrelator extends Serializable {
public String getCorrelationId();
}
Der Client muss einen eigenen Listener für Antwortnachrichten oder eine Nachrichtendatenbank implementieren, damit er den Eingang von Antwortnachrichten registrieren kann. Auf diese Weise kann die Korrelation der Antwortnachricht zur Anforderung verwaltet und eine der Methoden zur Bearbeitung asynchroner Antworten aufgerufen werden. Beispielhaft für die Anforderungen, die der Client-Listener erfüllen muss, zeigt das folgende Codefragment, was in der Methode "onMessage" eines JMS-Listeners angegeben werden kann:
public void onMessage(Message msg) {
WSIFCorrelationService cs = WSIFCorrelationServiceLocator.getCorrelationService();
WSIFCorrelationId cid = new JmsCorrelationId( msg.getJMSCorrelationID() );
WSIFOperation op = cs.get( cid );
op.fireAsyncResponse( msg );
}