Usually I have a definite opinion about what a BPMN construct means, and whether some diagram fragment is valid or not. Here I used to have an opinion, but now I'm not sure. I'm hoping a reader will set me straight. The issue is an intermediate event (e.g., message or timer) "floating" in a process or expanded subprocess alongside the regular flow, the one bounded by start and end events. The floating event has a sequence flow out, leading eventually to end event, but no sequence flow in. It's just floating there.
I always thought this was illegal, but I've seen it in Appian diagrams and more recently in Active Endpoints. Michael Rowley from Active Endpoints, who knows a bit about it, says it's legal in BPMN 1.1, and now I'm not sure. Here is what the spec says about intermediate events "in Normal flow", i.e. not attached to activity boundary... (and the language is repeated verbatim in the IBM draft of BPMN 2.0):
Intermediate Events of the following types MUST be a target of a Sequence Flow: None, and Compensation. They MUST have one (and only one) incoming Flow.... Intermediate Events of the following types MAY be a target of a Sequence Flow: Message, Timer, Conditional, Link, and Signal. They MAY have one (and only one) incoming Flow. Note ? These types of Intermediate Events will always be ready to accept the Event Triggers (once) while the Process in which they are contained is active. They are NOT optional and are expected to be triggered during the performance of the Process.That would seem to say "floaters" are allowed, at least for message, timer, conditional, and signal (link is special, not really an event). On the other hand, the semantics are not described. Michael says the BPEL mapping (non-normative) section suggests that if the trigger of the floater occurs, a new token is created, i.e. a parallel thread of this process (or subprocess) is instantiated, and in fact it can occur any number of times until the process or subprocess ends. Thus it acts like a non-aborting attached event, or at least the portion that runs within the context of the subprocess.
Hmmm. In that case, why does BPMN 2.0 add that bit about inline event subprocesses? And what does the mysterious Note (above) mean when it says that triggering of these intermediate events is "NOT optional and... expected... during performance of the Process"? If triggering the floater is not optional, it would not have to be floating; you could just draw a parallel sequence flow to it from the start event.
The language is baffling for sure, and no less so because it's repeated in BPMN 2.0. Any ideas out there?