Repository navigation
Workflow patterns
##Evaluation of HyperFlow with respect to workflow pattern support (http://www.workflowpatterns.com/)##
###Data patterns###
- Task Data
- Block Data
- Scope Data
- Multiple Instance Data
- Case Data
- Folder Data
- Workflow Data
- Environment Data
- Data Interaction - Task to Task
- Data Interaction - Block Task to Sub-Workflow Decomposition
- Data Interaction - Sub-Workflow Decomposition to Block Task
- Data Interaction - to Multiple Instance Task
- Data Interaction - from Multiple Instance Task
- Data Interaction - Case to Case
- Data Interaction - Task to Environment - Push-Oriented
- Data Interaction - Environment to Task - Pull-Oriented
- Data Interaction - Environment to Task - Push-Oriented
- Data Interaction - Task to Environment - Pull-Oriented
- Data Interaction - Case to Environment - Push-Oriented
- Data Interaction - Environment to Case - Pull-Oriented
- Data Interaction - Environment to Case - Push-Oriented
- Data Interaction - Case to Environment - Pull-Oriented
- Data Interaction - Workflow to Environment - Push-Oriented
- Data Interaction - Environment to Workflow - Pull-Oriented
- Data Interaction - Environment to Workflow - Push-Oriented
- Data Interaction - Workflow to Environment - Pull-Oriented
- Data Transfer by Value - Incoming. Yes: by receiving a signal with a data value.
- Data Transfer by Value - Outgoing. Yes: by sending a signal with a data value.
- Data Transfer - Copy In/Copy Out
- Data Transfer by Reference - Unlocked. Yes: data references can be passed in signals instead of actual values.
- Data Transfer by Reference - With Lock. Yes, indirectly. Support of a mutually accessible data store is considered a separate concern, out of scope of the workflow engine. However, functions can use an external store with a lock mechanism in which workflow processes can share data.
- Data Transformation - Input. Yes: data can be transformed in the process function, before the actual processing.
- Data Transformation - Output. Yes: data can be transformed in the process function, after the actual processing and right before invoking the callback.
- Task Precondition - Data Existence
- Task Precondition - Data Value
- Task Postcondition - Data Existence
- Task Postcondition - Data Value
- Event-based Task Trigger
- Data-based Task Trigger
- Data-based Routing. Yes: this pattern can be implemented with a
choiceprocess whose function evaluates a condition based e.g. on input signals and sets theconditionflag for output signals accordingly. Example: Streaming Map/Reduce workflow.
###Control patterns###
-
Sequence. Yes: a signal exchanged between two processes automatically establishes a sequence.
-
Parallel Split. Yes: several output ports of a process connected to multiple other processes automatically split the execution into parallel branches.
-
Synchronization. Yes: a
dataflowprocess synchronizes all branches of execution associated with its input ports. -
Exclusive Choice. Yes: this pattern is enabled by a
choiceprocess whose function evaluates the condition and sets theconditionflag for one of the output signals. -
Simple Merge. Yes: both simple and multi-merge can be implemented by having multiple processes produce the same signal to another process (see Multi-Merge pattern below for illustration).
-
Multi-Choice. Yes: the
choiceprocess type enables this pattern. -
Structured Synchronizing Merge
-
Multi-Merge. Yes: both simple and multi-merge can be implemented by having multiple processes produce the same signal to another process, as illustrated below.

-
Structured Discriminator
-
Blocking Discriminator
-
Cancelling Discriminator
-
Structured Partial Join
-
Blocking Partial Join
-
Cancelling Partial Join
-
Generalised AND-Join. Yes: Dataflow process type naturally fulfills this pattern owing to the mechanism of queuing signals built into the HyperFlow model of computation.
-
Local Synchronizing Merge
-
General Synchronizing Merge. Not supported
-
Thread Merge. Yes: this pattern can be implemented using a
choiceprocess, as in the AppEngine image gallery workflow where we need to wait for all image processing 'threads' to finish before we can generate the HTML file. To this end, theMergePathsprocess gets a count of items to be collected (pathCnt) and for everythumbPathreceived, it adds it to a collection, decreases the value of thepathCntemits it to itself. WhenpathCntreaches 0, the process emits the other signal (thumbPathList) signal, concluding the merge. -
Thread Split. Yes: the
parlevelproperty of a process enables this pattern, as in the AppEngine image gallery workflow. -
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
-
Static Partial Join for Multiple Instances
-
Cancelling Partial Join for Multiple Instances
-
Dynamic Partial Join for Multiple Instances
-
Deferred Choice
-
Interleaved Parallel Routing
-
Milestone
-
Critical Section
-
Interleaved Routing
-
Cancel Task
-
Cancel Case
-
Cancel Region
-
Cancel Multiple Instance Activity
-
Complete Multiple Instance Activity
-
Arbitrary Cycles
-
Structured Loop
-
Recursion
-
Implicit Termination
-
Explicit Termination
-
Transient Trigger
-
Persistent Trigger