A Diverging Parallel Gateway with a Converging XOR does the trick :-)
Doesnt cope with the scenario where you want logic on the join (maybe 2 out of 3 need to complete ?) but I'll worry about that another day.
The problem here is that the the paths are left active. The proces moves on after the XOR but the process wont complete until the other paths have been executed and taken to completion. I was hoping they would be aborted :-(
I ended up not having a parallel gateway at all as I believe this pattern is a bit suspect in JBPM.
- I used a Reuseable Process (call) activity to launch a new process asynchronously (Wait For Completion unchecked)
- I passed the process instance id of the calling activity into the async sub process
- Meanwhile the main flow went into an embedded subprocess with a boundary Signal event
- When the called process completes it uses a script activity making use of kcontext.getKieBase().getKieSessions()...getProcessInstance(pid).signalEvent(...) to move the calling process on
- There must be some dehydrating activity (timer or human task for instance) in the called subprocess to release control back to the calling process so it can get to the signal Catch before it is fired in the called process else it will be missed