Pattern 5 (Simple Merge)

FLASH animation of Simple Merge pattern

Description

The convergence of two or more branches into a single subsequent branch such that each enablement of an incoming branch results in the thread of control being passed to the subsequent branch.

Synonyms

XOR-join, exclusive OR-join, asynchronous join, merge.

Examples

At the conclusion of either the bobcat-excavation or the D9-excavation tasks, an estimate of the amount of earth moved is made for billing purposes.

After the case-payment or provide-credit tasks, initiate the product-receipt task.

Motivation

The Simple Merge pattern provides a means of merging two or more distinct branches without synchronizing them. As such, this presents the opportunity to simplify a process model by removing the need to explicitly replicate a sequence of tasks that is common to two or more branches. Instead, these branches can be joined with a simple merge construct and the common set of tasks need only to be depicted once in the process model.

Overview

Figure 5 illustrates the behaviour of this pattern. Immediately after either task A or B is completed, task C will be enabled. There is no consideration of synchronization.

Figure 5: Simple merge pattern

Context

There is one context condition associated with the pattern: the place at which the merge occurs (i.e. place p1 fin Figure 5) is safe and can never contain more than one token.

Implementation

Similar to patterns WCP2-WCP4, this pattern can either be represented explicitly or implicitly. Staffware, SAP Workflow and UML 2.0 ADs provide specific join constructs for this purpose where as it is represented implicitly in WebSphere MQ, FLOWer, COSA and BPEL. BPMN and XPDL allow it to be represented in both ways.

Issues

One issue that can arise with the use of this pattern occurs where it cannot be ensured that the incoming place to the merge (p1) is safe.

Solutions

In this situation, the context conditions for the pattern are not met and it cannot be used, however there is an alternative pattern - the Multi-Merge (WCP8) - that is able to deal with the merging of branches in potentially unsafe process instances.

Evaluation Criteria

Full support for this pattern is demonstrated by any offering which provides a construct which satisfies the description when used in a context satisfying the context assumption.

Product Evaluation

To achieve a + rating (direct support) or a +/- rating (partial support) the product should satisfy the corresponding evaluation criterion of the pattern. Otherwise a - rating (no support) is assigned.

Product/Language

Version

Score

Motivation

Staffware 10 + Supported through a step construct that has multiple input arcs. Also a router can be used to model such a join. Note that Staffware only merges flows that are safe, i.e., if multiple triggers arrive at a step, only one trigger is retained.
Websphere MQ 3.4 + Supported by specifying start conditions on an activity.
FLOWer 3.51 + Supported by the end nodes of the plan type system decision and the plan type user decision. Multiple incoming arcs in static, dynamic and sequential subplans can be used to merge flows.
COSA 5.1 + Supported by multiple incoming arcs to a place.
iPlanet 3.0 + Supported by specifying a trigger condition for an activity with multiple incoming routers that fires when any incoming router is activated.
SAP Workflow 4.6c + Directly supported. However, there has to be a one-to-one correspondence between splits and joins.
FileNet 3.5 + Directly supported by a step (which is not a collector step).
BPEL 1.1 + Supported by <switch> or links within the <flow> construct.
Websphere Integration Developer 6.0 + Supported by the <switch> activity or links within a <flow> activity.
Oracle BPEL 10.1.2 + Supported by the <switch> construct or links within a <flow> construct.
BPMN 1.0 + Supported by XOR-join gateway.
XPDL 2.0 + Supported by the XOR-join construct.
UML ADs 2.0 + Supported by the MergeNode construct.
EPC (implemented by ARIS toolset 6.2) + Supported by the XOR-join connector.
jBPM 3.1.4 + jBPM implements simple merge through a Task Node to which the split (earlier in the flow) treads, one of which is executed, converges.
OpenWFE 1.7.3 + OpenWFE supports Simple Merge through the closing tag </case> of the <case> construct.
Enhydra Shark 2 + Enhydra Shark supports simple merge through an activity node to which a transition restriction <Join Type = "XOR"> is defined. (Shark, Wil).