Oracle Fusion Middleware Blog

Deutsche Informationen rund um Oracle Fusion Middleware

BPEL 2.0: For Each Beispiel

leave a comment »

In der Oracle SOA/BPM Suite 11g werden unter anderem die Standards BPEL 1.1 und BPEL 2.0 unterstützt. Für die parallele Verarbeitung von mehreren Aktivitäten/Verzweigungen steht im BPEL 2.0 Standard die sogenannte „For Each“ Aktivität zur Verfügung.  Die „For Each“ Aktivität ersetzt die Oracle Erweiterungsaktivität „FlowN“ aus BPEL 1.1.

Das nachfolgende Beispiel zeigt, wie mehrere Personendatensätze mit der „For Each“ Aktivität parallel abgearbeitet werden. Die zugehörige Personendatenstruktur wird durch folgende XSD beschrieben:

Abbildung 1: Personendatenstruktur

Abbildung 1: Personendatenstruktur

Für die Abarbeitung wird wie in Abbildung 2 gezeigt, eine asynchrone Composite Applikation „Caller” entwickelt, die einen asynchronen Service „Callee Service”, hier als asynchroner BPEL Prozeß dargestellt, aufruft, um anschließend das Ergebnis in einer Datei zu archivieren (Service: Write2File).

Abbildung 2: Composite Applikation „Caller BPEL Process”

Abbildung 2: Composite Applikation „Caller BPEL Process”

Im BPEL Prozeß „CallerBPELProcess” wird innerhalb einer „For Each“ Aktivität der asynchrone „CalleService” mehrfach aufgerufen und zwar soviel mal wie es Personendatensätze gibt. Ferner wird innerhalb des „For Each“ Scopes mittels einer sogenannten eindeutigen Conversation-ID, die Korrelation sicher gestellt.

Abbildung 3: CallerBPELProcess mit einer „For Each“ Aktivität

Abbildung 3: CallerBPELProcess mit einer „For Each“ Aktivität

Eine eindeutige Conversation-ID kann zum Beispiel aus der Instanz-ID konkatiniert mit einem Personendatensatzzähler (Zähler innerhalb der „For Each“ Aktivität, hier: ForEach1Counter) gewonnen werden. Die eindeutige Conversation-ID muss jeweils in der Invoke- und Receive-Aktivität verwendet werden.

Abbildung 4: „For Each“ Konfiguration

Abbildung 4: „For Each“ Konfiguration

For Each Konfiguration: Counter Value Definition für den Personendatensatzzähler

For Each Konfiguration: Counter Value Definition für den Personendatensatzzähler

Wichtig zu erwähnen ist noch die Definition von lokalen Variablen, die als Parameter für das Invoke und Receive benötigt werden. Globale Variablen würden bei einer parallelen Abarbeitung Datenvariablen mit falschen Werten versehen, d.h. überschreiben.

Abbildung 5: Invoke Konfiguration

Abbildung 5: Invoke Konfiguration

In der zugehörigen Assignanweisung  (Abbildung 6 rote Umrandung) muss für die Zuordnung der Eingabevariable ein Index des „For Each“ Zählers mitgegeben werden, damit die richtigen Personendaten jeweils übergeben werden können.

Assign Aktivität: Zuordnung der einzelnen Personendatensätze

Abbildung 6: Assign Aktivität: Zuordnung der einzelnen Personendatensätze

Abbildung 7 zeigt die Eingabe von zwei Datensätzen sowie die paralle Abarbeitung dieser beiden Datensätze.

Abbildung 6: Eingabe und Verabeitung von zwei Personendatensätzen

Abbildung 7: Eingabe und Verabeitung von zwei Personendatensätzen

Eingesetzte SW:

  • SOA/BPM Suite 11.1.1.4
  • JDeveloper 11.1.1.4
  • Projektdownload: hier, bitte die Endung auf zip ändern und dann entpacken

<KM>

Written by fmtechteam

09/06/2011 um 16:00

Veröffentlicht in BPEL, Kersten Mebus, SOA

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: