In BPMN 2, is it valid to connect an boundary event (such an error event) to a link throw event, directly or indirectly?
By my understanding of the BPMN 2 spec, that should be invalid. Flow leaving a boundary event is exception flow
, and Link Event
requires normal flow
. But (a) that restriction seems arbitrary to me and (b) validation tools such as Camunda modeler or jBPM modeler do not report validation errors and happily execute it.
Consider e.g. the following BPMN diagram:
There is a boundary event on the sub process. According to the BPMN spec 2.0.2, p. 268, section 10.5.6, Handling Events:
An interrupting boundary Event is defined by a true value of its cancelActivity attribute. Whenever the Event occurs, the associated Activity is terminated. A downstream token is then generated, which activates the next element of the Process (connected to the Event by an unconditional Sequence Flow called an exception flow).
That is, the flow between the boundary event (regardless of its type) and the task is exception flow
.
Also, by my understanding, exception flow
remains exception flow
until it is joined with normal flow
(although I did not find any explicit statement of this in the spec).
So the flow between the task and the link intermediate throw event
is also exception flow
.
Next, the BPMN spec, p. 252, section 10.5.4, Intermediate event, says
The Link Intermediate Events are only valid in normal flow, i.e., they MAY NOT be used on the boundary of an Activity.
Therefore, as the link event occurs within exception flow
, which is not normal flow
, the BPMN diagram is invalid.
(The part after the i.e.
makes it sound like the intention is to only forbid link events as a boundary event, but not after a boundary event. But the part before clearly restricts the flow type in general.)
Is my understanding correct? Link events can only be used within the normal flow? Considering link events are supposed to be visual connectors, that seems like an arbitrary restriction to me.
(context: I am tasked with converting a non-BPMN process to a valid BPMN process that preserves the original execution semantics as much as possible; and am thus trying to understand various BPMN details.)
An Activity can end in two ways: Either it ends because its tasks have been completed or because some interrupting event occurred. Both endings produce a token that traverses along the respective sequence flow. From a global perspective it makes sense, to call the second one an exception flow. But from the token perspective there is no difference.
I would say, the sentence for the link event only refers to the boundary event, not to any difference of the flow. I agree that it is misleading.