BPEL-Tutorial - BPEL-Prozess mit einfachem Invoke auf Apache ODE in Eclipse

Hinweis: Dieses Tutorial ist im Rahmen der Übung zur Vorlesung Entwicklung service-orientierter Architekturen und Anwendungen (SOA 2008 und SOA 2010) entstanden.

Autoren: Daniel Lübke, Leif Singer, Kai Stapel
Version: 06.06.2011

In diesem Tutorial wird ein einfacher BPEL-Prozess geschrieben, der in Apache ODE deployed wird. Der Prozess antwortet mit "Hi $Name", wobei $Name der Übergabeparameter an den Prozess ist und das Grußwort (Hi, Hallo, ...) variieren soll. Dazu benutzt der BPEL-Prozess einen Webservice, der zufällig ein Grußwort zurückliefert. Dieser Webservice hat einen boolean-Parameter, der angibt, ob an dem Grußwort ein Leerzeichen angefügt werden soll oder nicht.

Voraussetzungen

Dieses Tutorial setzt voraus, ...

Vorgehen

  1. BPEL-Projekt erstellen: Erstellen Sie ein neues Projekt in Eclipse. Als Projekttyp wählen Sie BPEL 2.0/BPEL Project. Setzen Sie keine Target Runtime und keine Configuration, sondern lassen Sie die Voreinstellungen.

    Screenshot: New Project Wizard

    Screenshot: New BPEL Project Wizard

  2. Neuen BPEL-Prozess erstellen: Erstellen Sie einen neuen Ordner mit dem Namen SimpleInvokeProcess. Erstellen Sie darin einen neuen BPEL-Prozess (New/Other/BPEL 2.0/New BPEL Process File). Nennen Sie den Prozess SimpleInvokeProcess und benutzen Sie den Namespace http://www.se.uni-hannover.de/soa08/tutorial/SimpleInvokeProcess. Wählen Sie die Vorlage für einen synchronen BPEL-Prozess. Bestätigen Sie mit Finish.

    Screenshot: New BPEL Process Wizard

  3. Importieren der WSDL-Datei für den aufzurufenden Service: Im Rahmen dieses Tutorials werden wir einen Hello-Service aufrufen, der verschiedene Grußwörter generiert. Die WSDL zu diesem Service kann heruntergeladen werden. Der Service ist auf einem SE-Server deployed und kann direkt genutzt werden. Alternativ können Sie auch den Service als deploybares WAR herunterladen und auf Ihrem eigenen Tomcat deployen. Importieren Sie die WSDL-Datei anschließend in das SimpleInvokeProcess-Verzeichnis im Eclipse-Projekt (Projektkontextmenü/Import/General/Filesystem).
  4. Erstellen der Variablen für die Nachrichten: Damit wir einen Webservice von BPEL aus aufrufen können, müssen wir ihm Nachrichten senden (Eingabe- und Ausgabenachricht). Diese speichern wir in zwei Variablen. Erzeugen Sie dazu mittels des +-Zeichens in dem Variablenview neben der Palette zwei neue Variablen mit den Namen RandomHelloRequest und RandomHelloResponse.

    Screenshot: Variable-View

    Legen Sie nun die Variablentypen fest. Wählen Sie dazu die request-Variable aus, aktivieren Sie das Eigenschaftsfenster (Properties) und gehen Sie den Reiter Details. Klicken Sie auf Browse... um die verfügbaren Datentypen anzuzeigen. Wählen Sie im Filter aus, dass nur Nachrichten (Messages) angezeigt werden. Fügen Sie über Add Schema die eingangs importierte WSDL-Datei hinzu.

    Screenshot: Schema hinzufügen

    Legen Sie nun den Datentyp für die request-Variable als sayHelloRequest fest. Bestätigen Sie den Typ mit Ok. Weil Eclipse den Namespace dieser Nachricht noch nicht kennt, werden Sie im folgenden nach einem Prefix gefragt, den Sie für diesen Namespace verwenden wollen. Bestätigen Sie den Dialog einfach mit Ok.

    Screenshot: Variablentyp festlegen

    Definieren Sie auf dieselbe Art den Typ für die response-Variable als sayHelloResponse.
  5. Erstellen des Invokes: Nun kann eine Invoke-Aktivität erstellt werden, die einen Webservice aufruft. Wählen Sie dazu aus der Palette Invoke aus und fügen Sie die neue Aktivität zwischen die vorgegebenen receive- und reply-Aktivitäten.

    Screenshot: Invoke-Aktivität hinzufügen

    Setzen Sie nun über die Eigenschaften des Invokes den Partnerlink, über den der Service aufgerufen wird. Wählen Sie dabei aus, dass Sie einen neuen, globalen Partnerlink erstellen wollen. Als Namen legen Sie RandomHelloPL fest.

    Screenshot: Partnerlink festlegen

    Im darauffolgenden Dialog erlauben Sie Porttypes im Filter und wählen Sie RandomHelloService aus.

    Screenshot: Partnerlink-Ziel festlegen

    Weil für diesen Porttype noch kein Partnerlinktype existiert, legt Eclipse einen neuen an. Nennen Sie diesen RandomHelloPLT und wählen Sie Next. Die erste Rolle nennen Sie RandomHelloServiceProvider und wählen den RandomHelloService als Porttype aus. Die zweite Rolle lassen Sie leer und bestätigen Sie den Dialog mit Finish. Nun können Sie in den Eigenschaften des Invokes als Operation sayHello festlegen.
  6. Festlegen der Input- und Outputvariablen: Um nun die Variablen dem Invoke zuzuordnen, legen Sie nun die beiden zuvor angelegten Variablen als Ein- bzw. Ausgabenachricht fest. Deaktivieren Sie hierzu die Option Use WSDL Message Parts Mapping und wählen Sie die entsprechenden Variablen aus den Dropdowns aus. Abschließend sollten die Eigenschaften so wie im untenstehenden Bild aussehen.

    Screenshot: Input- und Outputvariable festlegen

  7. Zusammenstellen der Nachrichten mittels Assign: Fügen Sie nun über die Palette zwei Assigns zu dem BPEL-Prozess hinzu. Eines platzieren Sie vor und eines hinter dem Invoke. Benennen Sie die Assigns wie auf unten stehendem Bild angegeben:

    Screenshot: Hinzufügen der Assigns

    Für das erste Assign (PrepareRandomHelloRequest) stellen Sie die Eigenschaften wie in folgendem Bild dargestellt ein:

    Screenshot: Eigenschaften von PrepareRandomHelloRequest

    Analog stellen Sie für das zweite Assign (PrepareOutput) folgende Eigenschaften ein:

    Screenshot: Eigenschaften von PrepareRandomHelloRequest

    Der XPath-Ausdruck ist dabei:
    concat(bpel:getVariableData('RandomHelloResponse', 'parameters', '/'), bpel:getVariableData('input', 'payload', '/'))
    Alternativ kann auch folgende, kurze Syntax verwendet werden. Diese ist in der aktuellen BPEL-Version vorzuziehen:
    concat($RandomHelloResponse.parameters/ns1:sayHelloReturn, $input.payload/tns:input)
  8. Erstellen des Deployments: Erstellen Sie analog zu Schritt 7 und Schritt 8 des vorigen Tutorials die WSDL und den Deployment Descriptor. Die WSDL sollte im Editor dabei wie folgt aussehen:

    Screenshot: Fertige WSDL

    Im Deployment Descriptor müssen Sie nun zusätzlich noch den Service für den neuen Partnerlink angeben, den der Prozess aufrufen soll. Wählen Sie dazu den entsprechenden Port wie im Bild angegeben aus:

    Screenshot: Fertiger Deployment Descriptor

    Nun kann der Prozess in Apache ODE deployed und danach aufgerufen werden.

Eclipse-Projekte

Der SimpleInvoke-BPEL-Prozess kann direkt in Eclipse als Projekt importiert werden. Wählen Sie dazu jeweils Import -> General -> Existing Projects into Workspace -> Select Archive File....

Der aufgerufene Random Hello Service kann direkt im Axis-Container deployed werden oder als Eclipse-Projekt importiert werden (Import -> WAR file).

Weiterführende Tutorials:

Siehe auch:


Letzte Änderung: 06.06.2011 von Kai Stapel