Clientprogrammiermodell für asynchrone EJB-Methoden

Wie in der Spezifikation Enterprise JavaBeans (EJB) 3.1 dokumentiert, können Sie asynchrone EJB-Methoden über lokale Geschäftsschnittstellen, ferne Geschäftsschnittstellen oder eine Sicht ohne Schnittstellen aufrufen. Aufrufe über eine EJB-2.1-Clientsicht oder eine Web-Service-Sicht sind nicht zulässig.

Die Schnittstellenspezifikation für eine asynchrone EJB-Methode muss den Rückgabetyp "void" oder den Typ "java.util.concurrent.Future <V>" haben. Andere Rückgabetypen werden in der Schnittstelle nicht unterstützt. Wie in der Spezifikation EJB 3.1 dokumentiert, muss die Implementierungsmethode für die Bean denselben Rückgabetyp haben.

Wenn Ihre Anwendung das Ergebnis eines asynchronen EJB-Methodenaufrufs nicht prüfen muss, verwenden Sie eine Schnittstellensignatur mit dem Rückgabetyp "void". Wenn Ihre Anwendung das Ergebnis eines asynchronen EJB-Methodenaufrufs prüfen muss, müssen Sie eine Schnittstelle mit dem Rückgabetyp "Future<V>" verwenden.

Außerdem müssen die Clients für die Behandlung von Ausnahmen vorbereitet werden. Wie in der Spezifikation EJB 3.1 dokumentiert, empfängt der Client eine Ausnahme, wenn der Container die erforderlichen internen Ressourcen für die Planung der Ausführung der asynchronen Methode nicht zuordnen kann. In diesem Fall kann der Client davon ausgehen, dass die asynchrone Methode nicht ausgeführt wird. Ausnahmen können auch eintreten, wenn die asynchrone Methode im Nicht-Client-Thread ausgeführt wird.

Wichtig: Wenn eine asynchrone Methode den Rückgabetyp "void" hat, hat der Client keinen Mechanismus, um Ausnahmeinformationen abzurufen. Der EJB-Container protokolliert in diesem Fall eine Informationsnachricht. Für asynchrone Methoden mit dem Rückgabetyp "Future<V>" speichert der EJB-Container jedoch Ausnahmeinformationen im Future<V>-Objekt. In diesem Fall erzeugen die Get-Methoden, die dem Future<V>-Objekt zugeordnet sind, eine Ausnahme des Typs "ExecutionException". Der Client muss die Methode "getCause" in ExecutionException aufrufen, um Details zur Ausnahme abzurufen.

Abschließend ist zu erwähnen, dass die Clients wissen müssen, dass die Get-Methoden im Future<V>-Objekt den Client-Thread blockieren, wenn die asynchrone Methode beim Aufruf der Get-Methode noch nicht abgeschlossen ist. Wenn Clients dieses Verhalten nicht wünschen, können Sie das Future<V>-Objekt abfragen, um festzustellen, wann die asynchrone Methode abgeschlossen ist, indem sie in regelmäßigen Abständen die Methode "isDone" aufrufen.

Schließlich können Clients das Future<V>-Objekt verwenden, um einen asynchronen Methodenaufruf abzubrechen. Wenn Sie versuchen, einen asynchronen Methodenaufruf abzubrechen, während die Methode auf die Ausführung wartet, wird die Methode nicht ausgeführt, und andere Interaktionen mit dem Future<V>-Objekt spiegeln den Abbruch wider. Erfolgt der Versuch, eine asynchrone Methode abzubrechen, nachdem die Ausführung bereits begonnen hat, wird die Methode weiter ausgeführt, die Bean-Methode kann allerdings immer noch feststellen, dass der Client versucht hat, den Aufruf abzubrechen, und einen anwendungsspezifischen Rückgabewert senden oder eine Ausnahme absetzen.

Eine weitere Alternative ist, dass der Client die Get-Methode verwendet, die einen Zeitlimitparameter enthält. Diese Get-Methode wartet nur so lange auf die Ergebnisse, bis das festgelegte Zeitlimit abgelaufen ist. Die Get-Methode kehrt zum Client zurück, sobald die Ausführung der Methode abgeschlossen ist bzw. wenn das Zeitlimit abläuft, selbst wenn die Methode noch nicht abgeschlossen ist.

Verschachtelte asynchrone Aufrufe werden unterstützt. Ein asynchroner Methodenaufruf kann aus einer asynchronen Methode heraus erfolgen.
Fehler vermeiden Fehler vermeiden: Beim Verschachteln asynchroner Methodenaufrufe sollten Sie die Einstellungen des Arbeitsmanagers berücksichtigen, um sicherzustellen, dass die Ressourcen ausreichend sind (maximale Anzahl von Threads und Größe der Warteschlange für Verarbeitungsanforderungen). Weitere Informationen finden Sie in der Beschreibung des Arbeitsmanagers für asynchrone Methoden, der dem EJB-Container zugeordnet ist.gotcha

Lesen Sie den Artikel zur Entwicklung von Clientcode für das Aufrufen asynchroner EJB-Methoden.


Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cejb_amclientpmodel
Dateiname:cejb_amclientpmodel.html