BPEL Evaluation Results

Evaluation results for BPEL version 1.1 against the workflow control-flow patterns

Pattern

Rating

Motivation

Sequence + Supported by <sequence> or links within the <flow> construct.
Parallel Split + Supported by <flow> construct.
Synchronization + Supported by <flow> construct.
Exclusive Choice + Supported by <switch> or links within the <flow> construct.

Simple Merge

+ Supported by <switch> or links within the <flow> construct.
Multi-Choice + Supported by links within the <flow> construct.
Structured Synchronizing Merge + Supported by links within the <flow> construct.
Multi-Merge - Not supported. The language is block structured and it is not possible for two threads of execution to run through the same path in a single process instance.
Structured Discriminator - Not supported. There is no dedicated language construct and links cannot be used in conjunction with an OR joinCondition as the join requires the status of all incoming links to be known before evaluation, not just the identification of the first positive link.
Arbitrary Cycles - Not supported. The language is block structured and cannot capture unstructred cycles.
Implicit Termination + Directly supported for the <flow> construct. For other construct, each branch must be ended with an end event node.
Multiple Instances without Synchronization + Supported by <invoke> statement within <while> loop.
Multiple Instances with a Priori Design-Time Knowledge - Not supported. No direct means of denoting multiple activity instances are required.
Multiple Instances with a Priori Run-Time Knowledge - Not supported. No direct means of denoting multiple activity instances are required.
Multiple Instances without a Priori Run-Time Knowledge - Not supported. No direct means of denoting multiple activity instances are required.
Deferred Choice + Supported by the <pick> construct.
Interleaved Parallel Routing +/- Indirectly supported via serializable scopes but limited to activities within the same scope.
Milestone - Indirectly achievable by using a <pick> construct within a <while> loop which can only be executed once but solution is overly complex.
Cancel Activity + Supported through fault and compensation handlers.
Cancel Case + Supported by <terminate> construct.
Structured Loop + While loops are directly supported.
Recursion - Not supported. Recursive composition is possible on an external basis using the <invoke> construct against web services but there is no internal support.
Transient Trigger - Not supported. Messages are durable in form.

Persistent Trigger

+ Supported by <pick> construct waiting on specific message type.
Cancel Region +/- No means of cancelling arbitrary groups of activities although activities within the same scope can be cancelled.
Cancel Multiple Instance Activity - No support for multiple activity instances.
Complete Multiple Instance Activity - No support for multiple activity instances.
Blocking Discriminator - Not supported. There is no dedicated language construct and links cannot be used in conjunction with an OR joinCondition as the join requires the status of all incoming links to be known before evaluation, not just the identification of the first positive link.
Cancelling Discriminator - Not supported. As for WCP28.
Structured N-out-of-M Join - Not supported. Similar to the discriminator, there is no dedicated language construct and links cannot be used in conjunction with an OR joinCondition as the join requires the status of all incoming links to be known before evaluation, not just the identification of the first N positive links.
Blocking N-out-of-M Join - Not supported. As for WCP30.
Cancelling N-out-of-M Join - Not supported. As for WCP30.
Generalised AND-Join - Not supported. There is no notion of multiple execution threads through a single path in a process instance.
Static Partial Join for Multiple Instances - No support for multiple activity instances.
Cancelling Partial Join for Multiple Instances - No support for multiple activity instances.
Dynamic Partial Join for Multiple Instances - No support for multiple activity instances.
Acyclic Synchronizing Merge + Supported by links within a <flow> construct.
General Synchronizing Merge - Not supported. Process models are always block structured and OR-joins always operate within a <flow> construct.
Critical Section + Supported by serializable scopes.
Interleaved Routing + Supported by serializable scopes.
Thread Merge +/- The correlation facility for invoked activities provides the basic for coalescing distinct threads of control but programmatic extensions are necessary to keep track of when the merge should occur.
Thread Split +/- Achievable through the use of the <invoke> construct in conjunction with the correlation facility but programmatic extensions are necessary if subsequent thread merges are required.
Explicit Termination - Process instances complete when no activity instances remain to complete.