Open Source Product Evaluation

For each product-pattern combination, we checked whether it is possible to realize the workflow pattern with the tool. If a product directly supports the pattern through one of its constructs, it is rated +. If the pattern is not directly supported, it is rated +/-. Any solution which results in spaghetti diagrams or coding, is considered as giving no direct support and is rated -. Note that a pattern is only supported directly if there is a feature provided by the graphical interface of the tool (i.e., not in some scripting language) which supports the construct without resorting to any of solutions mentioned in the implementation part of the pattern.

Control-Flow Patterns

Pattern

Product

 

jBPM

OpenWFE

Enhydra Shark

Sequence + + +
Parallel Split + + +
Synchronization + + +
Exclusive Choice + + +

Simple Merge

+ + +
Multi-Choice - +/- +
Structured Synchronizing Merge - - -
Multi-Merge + - -
Structured Discriminator - + -
Arbitrary Cycles + + +
Implicit Termination + + +
Multiple Instances without Synchronization + + +
Multiple Instances with a Priori Design-Time Knowledge - + -
Multiple Instances with a Priori Run-Time Knowledge - + -
Multiple Instances without a Priori Run-Time Knowledge - - -
Deferred Choice + - -
Interleaved Parallel Routing - +/- -
Milestone - - -
Cancel Activity + - -
Cancel Case - +/- +
Structured Loop - + -
Recursion - + +
Transient Trigger + + -

Persistent Trigger

- - -
Cancel Region - - -
Cancel Multiple Instance Activity - - -
Complete Multiple Instance Activity - - -
Blocking Discriminator - - -
Cancelling Discriminator - + -
Structured Partial Join - + -
Blocking Partial Join - - -
Cancelling Partial Join - + -
Generalised AND-Join + - -
Static Partial Join for Multiple Instances - + -
Cancelling Partial Join for Multiple Instances - + -
Dynamic Partial Join for Multiple Instances - - -
Local Synchronizing Merge - +/- -
General Synchronizing Merge - - -
Critical Section - - -
Interleaved Routing - + -
Thread Merge +/- - -
Thread Split +/- - -
Explicit Termination - - -

Resource Patterns

Pattern

Product

 

jBPM

OpenWFE

Enhydra Shark

Direct Allocation + - +
Role-Based Allocation - + +
Deferred Allocation + + +
Authorisation - - -

Seperation of Duties

- - -
Case Handling - - -
Retain Familiar + - -
Capability Based Allocation - - -
History Based Allocation - - -
Organisational Allocation - - -
Automatic Execution + + +
Distribution by Offer - Single Resource - - +
Distribution by Offer - Multiple Resources - + +
Distribution by Allocation - Single Resource + - -
Random Allocation - - -
Round Robin Allocation - - -
Shortest Queue - - -
Early Distribution - - -
Distribution on Enablement + + +
Late Distribution - - -
Resource-Initiated Allocation - - -
Resource-Initated Execution - Allocated Work Item + - -
Resource-Initiated Execution - Offered Work Item - + +

System Determined Work Queue Content

- - -
Resource-Determined Work Queue Content - - -
Selection Autonomy + + +
Delegation - - -
Escalation - + -
Deallocation - + +
Stateful Reallocation - + -
Stateless Reallocation - - -
Suspension/Resumption + - -
Skip - - -
Redo - +/- -
Pre-Do - - -
Commencement on Creation - - -
Commencement on Allocation - - -
Piled Execution - - -
Chained Execution - - -
Configurable Unallocated Work Item Visibility - +/- -
Configurable Allocated Work Item Visibility - +/- -
Simultaneous Execution - - -
Additional Resources - - -

Data Patterns

Pattern

Product

 

jBPM

OpenWFE

Enhydra Shark

Task Data +/- - +/-
Block Data - + +
Scope Data - +/- -
Multiple Instance Data - + +
Case Data + + +
Folder Data - - -
Workflow Data - + -
Environment Data +/- + +/-
Task to Task + + +
Block Task to SubWorkflow Decomposition - + +
SubWorkflow Decomposition to Block Task - + +
To Multiple Instance Task - - -
From Multiple Instance Task - - -
Case to Case +/- +/- +/-
Task to Environment - Push-Oriented +/- + +/-
Environment to Task - Pull-Oriented +/- + +/-
Environment to Task - Push-Oriented - - -
Task to Environment - Pull-Oriented - - -
Case to Environment - Push-Oriented - - -
Environment to Case - Pull-Oriented - - -
Environment to Case - Push-Oriented - - -
Case to Environment - Pull-Oriented - - -

Workflow to Environment - Push-Oriented

- - -
Environment to Workflow - Pull-Oriented - - -
Environment to Workflow - Push-Oriented - - -
Workflow to Environment - Pull-Oriented - - -
Data Transfer by Value - Incoming - - +/-
Data Transfer by Value - Outgoing - - +/-
Data Transfer - Copy In/Copy Out + + +
Data Transfer by Reference - Unlocked - - -
Data Transfer by Reference - With Lock - + -
Data Transformation - Input + + +
Data Transformation - Output + + +
Task Precondition - Data Existence - + -
Task Precondition - Data Value - + -
Task Postcondition - Data Existence - - -
Task Postconditon - Data Value - - +/-
Event-Based Task Trigger - - -
Data-Based Task Trigger - - -
Data-Based Routing +/- +/- +