Process Instance Modification not initializing parallel non-interrupting flow

Hi,

If we have a parallel non-interrupting subflow listening on a message, after using Process Instance Modification API, that subflow cannot be invoked by global message using correlation id, it throws an error “No one is listening for the message event…”

Explanation:
I have an exception handler which uses Process Instance Modification API to return the flow to service task where the exception was raised:

execution.processEngineServices.runtimeService
                .createProcessInstanceModification(execution.processInstanceId)
                .startBeforeActivity(errorTaskId,execution.processInstanceId)
                .execute();

In the attached BPMN, flow is like:

  1. Service Delegate at TASK- 1 raises an exception
  2. Caught by Subflow “Exception Handler 1”
  3. Service Delegate “Rollback to original delegate” uses above process instance modification to return the control to TASK-1 delegate
  4. Now TASK-1 succeeds and it sends a global message with correlation
  5. This message suppose to invoke “Parallel Process 1” sub process, but it doesn’t work if the control came after process instance modification

This is my BPMN:

ExceptionFlow.bpmn (8.2 KB)

Generally speaking you shouldn’t be able to correlate a message send from a process instance to itself. That goes against how BPMN messages are defined in the BPMN spec. Might be better to use an escalation event - it would also be easier since you wouldn’t need to write any complex correlation script.

That said - if the message catching event is not being initallized at all after a modification then that could be a bug, i’ll look into reproducing it.

Thanks for the suggestion @Niall

I have tried message and signal with correlate event but same issue, let me try with escalation event.

Quick question, Is there any way to send escalation event from outside like we can send message/signal event:

processEngine.runtimeService.correlateMessage(
            "message1",
            "businessKey1"
        )

Basically my control is on Event Gateway and need to run a parallel sub process from java. Previously I was sending message/signal events