11. Übung zur Vorlesung Service-orientierte Architekturen Business Process Execution Language (BPEL) Fault- und Compensation-Handling SoSe 2011
Aktivitätsübersicht Einfache Aktivitäten Invoke Receive Reply Assign Compensate CompensateScope Empty Exit Strukturierte Aktivitäten Flow foreach If Pick repeatuntil Scope Sequence While Throw Rethrow Validate Wait SOA BPEL Fault- und Compensation-Handling SoSe 2011 2
Fehler in BPEL Fehler werden in BPEL durch Faults signalisiert (vgl. Webservices) Faults unterbrechen den normalen Kontrollfluss Wie bei den Webservices sollte man 2 Arten von Fehlern unterscheiden Technische Faults (System-centric) Von BPEL-Engine geworfen z. B. Netzwerkfehler, Syntaxfehler, Fachliche Faults/Fehler (Business-centric) selber geworfen, durch throw- bzw. rethrow-aktivitäten Meist fachliche Fehler bei Aufruf von Webservices z. B. Kunde existiert nicht in DB, Produkt nicht in ausreichender Menge vorhanden, SOA BPEL Fault- und Compensation-Handling SoSe 2011 3
Technische Faults in BPEL ambiguousreceive completionconditionfailure conflictingreceive conflictingrequest correlationviolation invalidbranchcondition invalidexpressionvalue invalidvariables joinfailure mismatchedassignmentfailure missingreply missingrequest scopeinitializationfailure selectionfailure sublanguageexecutionfault uninitializedparterrole uninitializedvariable unsupportedreference xsltinvalidsource xsltstylesheetnotfound SOA BPEL Fault- und Compensation-Handling SoSe 2011 4
Fehlerbehandlung in BPEL Faults werden zu Fault-Handlern weitergereicht (ähnlich catch-blöcke in Java) Es gibt catch- und catchall FaultHandler FaultHandler können für ein Invoke, einen Scope oder einen ganzen Prozess definiert werden FaultHandler enthalten Programmlogik zur Fehlerbehandlung Und nur diese, keine sonstige Logik! Catch fängt einen bestimmten Fault <bpel:catch faultname="bpel:selectionfailure"> <BPEL-Activity /> </bpel:catch> CatchAll fängt alle sonstigen Faults <bpel:catchall> <BPEL-Activity /> </bpel:catchall> SOA BPEL Fault- und Compensation-Handling SoSe 2011 5
FaultHandler-Definitionen Syntaxdefintion <catch faultname="qname"? faultvariable="bpelvariablename"? ( faultmessagetype="qname" faultelement="qname" )? >* Faults sind damit identifizierbar über Name Variable Message Type oder (Schema-)Element SOA BPEL Fault- und Compensation-Handling SoSe 2011 6
Faults in der BPEL-Struktur Process extensions imports partnerlinks Deklaration von benutzten BPEL-Erweiterungen Importieren von WSDL- und XML Schema Definition von beteiligten Parteien/Partnern messageexchanges variables correlationsets faulthandlers eventhandlers activity Definition von Nachrichtenaustäuschen Definition von Variablen Definition von Korrelationen Fehlerbehandlung (Prozess-Scope) Ereignisbehandlung Der Schritt, der den Prozess beinhaltet. Hier können Fehler auftreten (Invoke, Scope, Process). SOA BPEL Fault- und Compensation-Handling SoSe 2011 7
Compensation-Handling Aus dem Englischen Ausgleich Kompensation (Wiedergutmachung / Schadenersatz) Für Transaktionen bei langlebigen Prozessen Da dort keine Sperren möglich sind Compensation ist Gegenaktion einer Aktion Wird bei einem später im Prozess auftretenden Fehler ausgeführt, um eine bereits erfolgreich ausgeführte Aktivität rückgängig zu machen Bsp.: Hotel buchen Hotel stornieren Erfüllt keine ACID-Eigenschaften! BPEL kennt kein autom. Rollback (vgl. DB), Compensation muss explizit definiert werden Transaktionsgrenzen werden durch Scopes festgelegt SOA BPEL Fault- und Compensation-Handling SoSe 2011 8
Beziehung Fault Handling und Compensation Handling Fault Handler Reagieren auf Fehler Handler pro Prozess, Scope oder Invoke Werden bei einem Fehler ausgelöst Default verhalten Aufruf aller Compensation- Handler direkter Kind-Scopes Danach Rethrow des Faults ( nach oben weiter reichen) Compensation Handler Machen bereits erfolgreich ausgeführte Aktivitäten rückgängig Handler pro Scope oder Invoke Warum nicht für den ganzen Prozess? Werden durch Compensate- Aktivität ausgelöst Aus einem Fault-Handler oder anderem Compensate-Handler heraus Default verhalten (ohne expliziten Compensation-Handler) Aufruf aller Compensation- Handler von Kind-Scopes des aktuellen Scopes In umgekehrter Reihenfolge ihrer Beendigung SOA BPEL Fault- und Compensation-Handling SoSe 2011 9
Was passiert bei einem Fehler in bookhotel? SOA BPEL Fault- und Compensation-Handling SoSe 2011 10
Was passiert hier bei einem Fehler? SOA BPEL Fault- und Compensation-Handling SoSe 2011 11
Übung Faults Entwickelt einen BPEL-Prozess, der einen Customer- Relationship-Service benutzt, um zu testen, ob ein Kunde existiert (true) oder nicht (false) WSDL: http://services.se.uni-hannover.de/ CustomerService/services/CustomerManager?wsdl Interface: existscustomer(customerid:int) boolean Id < 0 ungültige ID 0 <= Id <= 9 Kunde existiert Id > 9 Kunde existiert nicht Rückgabewerte für den Prozess True, wenn Kunde zurückgegeben wird False, wenn Fault fault (Kunde existiert nicht) geworfen wird Der Fault fault1 (ungültige ID) soll weiter gereicht werden SOA BPEL Fault- und Compensation-Handling SoSe 2011 12
Aufgabe 11 (10P) Bestellprozess Schreiben Sie einen BPEL-Bestell-Prozess, der folgendes Interface implementiert processorder(amount:unsignedint, money:int) return:boolean 1. Im ersten Schritt soll der Prozess den folgenden Geldeinzugsservice benutzen, um das Geld für die Bestellung dem Lieferanten zu überweisen http://services.se.uni-hannover.de/withdrawservice/services/withdrawservice?wsdl 2. Im zweiten Schritt soll Verpackungsmaterial mit dem CartonJungle-Service aus der letzten Übung bestellt werden. Der Prozess soll bei erfolgreicher Bestellung true und bei einem fachlichen Fehler (OutOfStockFault) false zurück liefern Schreiben Sie einen Compensation-Handler für den 1. Schritt, der das bereits überwiesene Geld wieder zurück bucht (withdraw) Schreiben Sie einen Fault-Handler für den 2. Schritt, der eine Compensation auslöst, wenn das Produkt nicht in ausreichender Menge vorhanden ist, und den Prozess mit Rückgabe false beendet SOA BPEL Fault- und Compensation-Handling SoSe 2011 13