# WS-Business Process Execution Language

Die WS-Business Process Execution Language (BPEL) ist eine XML-basierte Sprache zur Beschreibung von Geschäftsprozessen, deren einzelne Aktivitäten durch Webservices implementiert sind. WS-BPEL ist Teil der sogenannten WS-*-Spezifikationen als industrieller Standard von OASIS.
Die im Jahr 2002 von IBM, BEA Systems und Microsoft eingeführte Sprache wird zur Beschreibung der Orchestrierung von Webservices verwendet. Die Beschreibung selbst wird ebenfalls in Form eines Webservice bereitgestellt und kann als solcher verwendet werden.
Durch die Abstraktion mittels BPEL kann die Schnittstelle eines übergeordneten Webservice beschrieben werden, der die an einem Prozess beteiligten Webservices steuert, beispielsweise in welcher Reihenfolge Nachrichten eintreffen müssen.

## Überblick

Das Prozessmodell WS-BPEL, ehemals BPEL4WS (englisch, Akronym für BPEL for Webservices), baut auf dem Dienstmodell von WSDL auf. Weiterhin werden die Standards XML Schema, XPath und WS-Addressing benutzt.
Die Sprache verbindet die Ideen der kalkülbasierten Sprache XLANG von Microsoft und der Graph-basierten Sprache WSFL von IBM.
Ziel von BPEL ist, das Programmieren im Großen zu ermöglichen. Dabei ist zu beachten, dass BPEL die direkte Interaktion mit Menschen nicht unterstützt. BPEL-Prozesse kommunizieren ausschließlich mit Webservices. Letztere können eine Schnittstelle zu Menschen jedoch nicht Menschen selbst sein.
BPEL selbst stellt einen Sockel dar, auf dem verschiedene Säulen gebaut werden können. Die Säulen abstrakter Geschäftsprozess und ausführbarer Geschäftsprozess sind schon in der Spezifikation selbst enthalten. Weitere Säulen sind BPELJ und WS-BPEL4People.
Bei BPELJ ist das Ziel, dass Aktivitäten selbst auch Java-Code enthalten können, was den Prozess selbst beschleunigt, ihn aber abhängig von der Programmiersprache Java macht.
IBM hat zusammen mit SAP ein Whitepaper unter dem Namen BPEL4People veröffentlicht, das die Anforderungen für eine Interaktion von Menschen an eine Erweiterung von BPEL stellt. Mittlerweile ist darauf basierend in Kooperation mit anderen Firmen eine Spezifikation entstanden, die zurzeit OASIS zur Standardisierung vorliegt (Stand April 2009).
BPEL beherrscht sowohl blockstrukturierte als auch graphbasierten Modellierung. Bei der Blockstrukturierung wird der Kontrollfluss mithilfe von strukturierten Aktivitäten wie sequence, if, foreach oder pick, ähnlich wie in prozeduralen Programmiersprachen, ausgedrückt. Die graphbasierte Modellierung erlaubt den Ausdruck des Kontrollflusses über sogenannte Transitionen zwischen den Aktivitäten. Diese Transitionen können mit Bedingungen (transition conditions) annotiert werden, die ausgewertet werden müssen, bevor eine Workflowmaschine der Transition folgt und zur nächsten Aktivität navigiert. Beim Eintritt in die Folgeaktivität kann über eine join condition bestimmt werden, welchen Status die eingehenden Transitionen haben müssen, damit die Aktivität ausgeführt wird. Zyklen sind dabei nicht erlaubt. Beide Modellierungsansätze können kombiniert werden, z. B. wenn graphbasiert modelliert wird, aber mithilfe von Scopes lokale Umgebungen mit lokalen Variablen verwendet werden sollen. Mit den Scopes können außerdem Fehlerbehandlung (Fault Handler), Kompensationsbehandlung (Compensation Handler) und Ereignisbehandlung (Event Handler) assoziiert werden.
Der BPEL-Standard selbst definiert keine graphische Darstellung der modellierten Prozesse. Dafür wird häufig die Business Process Model and Notation (BPMN) verwendet, die eine Beschreibung für die Abbildung von BPMN nach BPEL enthält. Jedoch entsprechen die Möglichkeiten von BPMN nicht exakt denen von BPEL. D. h., es ist möglich, mit BPMN Prozesse zu modellieren, die sich mit Hilfe von BPEL nicht umsetzen lassen.

## Abstrakte und ausführbare Prozesse

Ausführbare BPEL-Prozesse können auf einer Workflowmaschine zum Einsatz gebracht werden (englisch deployed) und sind durch sie ausführbar. Abstrakte Prozesse dienen der Beschreibung des Verhaltens des Prozesses („behavioral interface“). Sie werden als Sicht auf einen ausführbaren Prozess verwendet und dienen dazu, das interne Verhalten des Prozesses z. B. vor einem Geschäftspartner zu verbergen.

## Unterprozesse

BPEL selbst kennt keine Unterprozesse. Es ist so beispielsweise nicht immer möglich, einen Unterprozess zu terminieren, wenn der Hauptprozess terminiert wird. Diese Funktionalität kann durch explizite Operationen eines Webservices bereitgestellt werden, was jedoch nicht vom BPEL-Standard vorgeschrieben ist.
Von IBM und SAP wurde ein Whitepaper unter dem Namen WS-BPEL 2.0 Extensions for Sub-Processes (BPEL-SPE) veröffentlicht, in dem eine Erweiterung von BPEL für Unterprozesse erläutert wird.

## Stand der Entwicklung

Aktuell ist die Version 2.0, bei dem weitere Hersteller wie SAP und Siebel mitgewirkt haben. Bis zur Version 1.1 wurde der BPEL-Standard mit BPEL4WS (Business Process Execution Language for Webservices) benannt. Der Standard wurde im April 2003 an OASIS zur Standardisierung übergeben.
Das OASIS WS-BPEL-Komitee beschloss am 14. September 2004, die Spezifikation WS-BPEL 2.0 zu nennen, um in Einklang mit den anderen WS-*-Standards wie WSDL, WS-Security usw. zu gelangen.
Die Standardisierung von WS-BPEL 2.0 wurde am 11. April 2007 abgeschlossen. Sie enthält Detailverbesserungen, ist jedoch inkompatibel zu den 1.x-Versionen.

## Sprachbestandteile

Basic Activities – Dies sind die grundlegenden – sozusagen atomaren – Aktivitäten, welche nicht aus anderen Aktivitäten aufgebaut sind:
* assign – Verändern des Inhalts einer Variablen.
* invoke – Synchroner (request/response) oder asynchroner Aufruf eines Webservice
* receive/reply – Anbieten einer synchronen oder asynchronen Webserviceschnittstelle
* throw – Explizites Signalisieren eines Fehlers, welcher durch Fehlerbehandlungen aufgefangen werden kann. Wird ein Fehler nicht aufgefangen, erreicht er also den globalen Scope, so terminiert der Prozess.
* wait – Warten auf einen Zeitpunkt oder für eine Zeitspanne
* empty – Nichts tun, z. B. um in einer Fehlerbehandlung nichts zu tun und den Fehler so zu unterdrücken
Structured Activities – Diese Aktivitäten beinhalten andere Aktivitäten und lassen so die rekursive Komposition von komplexen Prozessen zu.
* sequence – In einer Sequence werden die Aktivitäten sequentiell abgearbeitet.
* while – Ausführen von Aktivitäten solange eine boolesche Bedingung erfüllt ist
* repeatUntil (seit BPEL 2.0) – Ausführen von Aktivitäten bis eine boolesche Bedingung erfüllt ist
* foreach (seit BPEL 2.0) – Aktivitäten eine bestimmte Anzahl oft ausführen, entweder sequentiell oder parallel.
* switch (nicht in BPEL 2.0) – Bedingte Ausführung von Aktivitäten
* if (seit BPEL 2.0) – Bedingte Ausführung von Aktivitäten
* flow – Die Aktivitäten werden parallel ausgeführt, wobei Kontrollabhängigkeiten durch links angegeben werden.
* pick – Aus Prozesssicht nicht-deterministische Wahl durch externe Ereignisse (Messages, Zeitpunkt oder Zeitspanne)
Scopes – Mit Hilfe dieses Konstrukts können Aktivitäten gebündelt werden und zu einer transaktionalen Einheit zusammengefasst werden. Durch einen Scope kann einer Gruppe von Aktivitäten ein Fehlerbehandler („fault handler“), Ereignisbehandler („event handler“), ein Terminationsbehandler und ein Kompensationsbehandler („compensation handler“) zugeordnet werden. Durch den Kompensationsbehandler werden lang-andauernde Transaktionen ermöglicht.

## BPEL-Engines

BPEL-Engines erlauben das Ausführen von BPEL-Prozessinstanzen. Hierzu müssen die BPEL-Prozesse in die BPEL-Engine eingebracht (deployed) und dabei von der jeweiligen BPEL-Engine abhängige Deployment-Informationen bereitgestellt werden.

### Open-Source-BPEL-Engines

* Apache ODE – ODE steht für Orchestration Director Engine, unterstützt WS-BPEL 2.0 und BPEL4WS 1.1
* bpel-g -- Open-Source-BPEL-Engine (auf Basis der aufgegebenen Open-Source-Version von ActiveBPEL, jetzt ActiveVOS)

### Kommerzielle BPEL-Engines

* ActiveVOS – kommerzielle Weiterentwicklung von ActiveBPEL (Open-Source-Implementierung (GPL) von BPEL4WS 1.1 und WS-BPEL 2.0)
* Intalio|BPMS – Commercial-Open-Source-BPEL-Server, basiert auf Open-Source-Komponenten (Apache ODE, Tempo), die zu einem Closed-Source-Produkt kombiniert wurden.
* Oracle BPEL Process Manager – (vormals Collaxa BPEL Orchestration Server) Native Implementierung des BPEL-Standards, mit grafischer Modellierungs/Orchestrierungs Tool für JDeveloper und Eclipse. Oracle ist einer der wesentlichen Treiber bei der Weiterentwicklung des BPEL-Standards innerhalb der OASIS. In der neuen Version 11g werden BPEL-Prozesse im Rahmen von Composites innerhalb von Service-Component-Architekturen (SCA-Standard) eingebunden.
* SAP Exchange Infrastructure – Implementierung des BPEL-Standards 1.1, grafische Modellierung über ARIS für SAP NetWeaver. Deployment in Solution Manager und XI, die auf Basis des SAP NetWeaver arbeiten
* SEEBURGER Business Integration Server – Teil des B2B-Integrationsservers ist eine BPEL-Engine und ein Eclipse basierender Prozessdesigner. Damit lassen sich also alle Integrationsabläufe (nicht nur für WebService) designen.
* WebSphere Process Server – BPEL-Laufzeitumgebung der IBM basiert auf WebSphere Application Server, dem Jakarta EE Server der IBM.
* BPWS4J – Experimentelle BPEL-Implementierung von IBM verfügbar über AlphaWorks
* Microsoft BizTalk Server – BizTalk Server 2006 kann Prozessmodelle ausführen, die mit Modellierungswerkzeugen wie Microsoft Visio erstellt worden sind.
* Microsoft Windows Workflow Foundation im MSDN – Die Windows Workflow Foundation ist Teil von .NET 3.0 und umfasst auch eine vollständige Abbildung von BPEL. Der Designer ist im Visual Studio 2005 als Add-on verfügbar, Visual Studio 2008 bietet die Funktionalität nativ.
* Serena Business Manager – Die Serverkomponente enthält seit Ende 2015 die Apache-ODE-BPEL-Engine, die BPEL-Prozesse in Kombination mit Human Workflows ausführt (ein sogenanntes Mashup)
* Software AG webMethods BPM – Kommerzielle Engine (inkl. ESB) mit einem auf Eclipse basierenden Designer; enge Integration in ARIS (genannt 'Model-2-Execute').

## Vergleichbare Sprachen

* XL
* XML Process Definition Language (XPDL)
* XLANG
* WS-Flow Language (WSFL)
* ASAP/Wf-XML
* Generic Workflow Description Language (GWorkflowDL)
* Business Process Modeling Language (BPML)
* BPELscript