According to the WS-BPEL 2.0 execution rules for links, a link cannot create a control cycle by linking to a completed activity. In addition, a link cannot cross the boundary of a structured activity, such as a while activity. However, Process Developer includes an extension that allows these behaviors under certain conditions.
The following illustration shows two cases of using loop-back links to a completed activity. On the left is an example of a valid use of a loop-back link. On the right is a case that will cause an error in static analysis because it violates the fork join restriction described below.
By default, the link extension is turned on, allowing you to use loop-back links. You can turn off the extension on a process-by-process basis by setting the
Links are Transitions
property in the All tab of a process.
Execution Rules for Extension to Links
The basic execution rules for Process Developer extension to links are the following.
When the source of a link completes, then if the transition condition evaluates to true or there is no condition, the transition fires; if the target of the link is an activity with no other incoming transitions, the activity executes.
BPEL's constraints regarding how links can cross the boundaries of containers continue to hold except that a Process Developer extension link can cross out of a Repeat Until activity if the source of the link has the
Mutually Exclusive Transitions
property is set to
Yes
in an activity's Properties view. By default, this property is set to
, the normal control flow of any container that contains the activity is continued only if none of the outbound links from the activity can execute. The behavior should be obvious based on the process diagram since it follows standard BPMN semantics.
BPMN disallows links from crossing the border of any bordered activity. However, BPEL allows links to cross scope boundaries, so Process Developer also allows this behavior, even though it is not valid BPMN.
Usage Restriction for Activities in Parallel Execution
If two or more activities execute in parallel, and you want to create a link that loops back to before the parallelism, the parallelism must be encapsulated within a Fork Join container. This restriction ensures that there will not be concurrent execution of looping activities since the fork join ensures that all activities on parallel paths complete and join together before the next execution of the loop.
We recommend that you use mutually exclusive links as the source links of a gateway activity that is an exclusive type. Drawing links out of an exclusive gateway clarifies the intended behavior of outbound links. Note that using Process Developer extension links as loop-back links is similar to using a While or Repeat Until activity that is already structured for you.
Process Developer Extension Namespace for Links
You may notice that your processes include the Process Developer extension for links in the Extensions node of the Outline.