The Incoming Processor Pattern and the BPMS
another process pattern: the Incoming Processor Pattern. It is a good pattern – and actually forms the basis for a lot of variants of that pattern (in a sense, it is the base case of a wide variety of patterns). Essentially, Anatoly describes a process that begins with a message start event listener:Anatoly has posted
Beyond that, Anatoly points out there is a challenge with respect to having more than one instance of this process:
But here is the question: how would the message from client John Smith find its way into specific process instance associated with him? Let’s not forget that there are about thousand of instances behind the single pool “Credit card issuance” shown in the diagram. […] But when a message is sent into the middle of a process (i.e. to the intermediate event) one must specify the process instance ID. Moreover, the process instance ID is the internal BPMS data so we can’t expect that a message from an external entity (from collapsed pool on a BPMN diagram) would contain it explicitly. In our case it’s just client’s words “hello, I want my card.”He even diagrams this “incoming processor”:
I found his description of this pattern interesting, because the BPMS that I use most often (Lombardi / IBM BPM) wouldn’t require the incoming processor pattern for this use case. The typical case for BPMS’ is that the event listeners can hear events targeted at their process instance id. But Lombardi took a different tact that IBM has preserved – events “correlate” on any piece of process instance information – process instance id is certainly one option, but so is a name, or a debit card number. And the logic to find and message the right process instance is built into the engine. Not only that- a message my correlate with more than one process instance -automatically- based on the various correlations. So this is a case where the BPM engine allows the models to be both more expressive and more concise, and to leave the incoming processor logic as a black box that “just works.” But if your BPMS doesn’t do this for you, or if you need to do additional pre-processing logic before the process instance is triggered, this pattern will do the trick. Once again, a great, thought-provoking post from Anatoly’s blog.