in core/src/main/java/com/alibaba/smart/framework/engine/bpmn/behavior/gateway/ParallelGatewayBehavior.java [126:177]
private boolean common(ParallelGateway parallelGateway, ProcessInstance processInstance, List<ExecutionInstance> executionInstanceListFromDB, int countOfTheJoinLatch) {
List<ExecutionInstance> executionInstanceListFromMemory = InstanceUtil.findActiveExecution(processInstance);
List<ExecutionInstance> mergedExecutionInstanceList = new ArrayList<ExecutionInstance>(executionInstanceListFromMemory.size());
LOGGER.debug("ParallelGatewayBehavior Joined, the value of executionInstanceListFromMemory, executionInstanceListFromDB is {} , {} ",executionInstanceListFromMemory,executionInstanceListFromDB);
for (ExecutionInstance instance : executionInstanceListFromDB) {
if (executionInstanceListFromMemory.contains(instance)){
//ignore
}else {
mergedExecutionInstanceList.add(instance);
}
}
mergedExecutionInstanceList.addAll(executionInstanceListFromMemory);
int reachedJoinCounter = 0;
List<ExecutionInstance> chosenExecutionInstanceList = new ArrayList<ExecutionInstance>(executionInstanceListFromMemory.size());
if(null != mergedExecutionInstanceList){
for (ExecutionInstance executionInstance : mergedExecutionInstanceList) {
if (executionInstance.getProcessDefinitionActivityId().equals(parallelGateway.getId())) {
reachedJoinCounter++;
chosenExecutionInstanceList.add(executionInstance);
}
}
}
LOGGER.debug("chosenExecutionInstanceList , reachedJoinCounter,countOfTheJoinLatch is {} , {} , {} ",chosenExecutionInstanceList,reachedJoinCounter, countOfTheJoinLatch);
if(reachedJoinCounter == countOfTheJoinLatch){
//把当前停留在join节点的执行实例全部complete掉,然后再持久化时,会自动忽略掉这些节点。
if(null != chosenExecutionInstanceList){
for (ExecutionInstance executionInstance : chosenExecutionInstanceList) {
MarkDoneUtil.markDoneExecutionInstance(executionInstance,executionInstanceStorage,
processEngineConfiguration);
}
}
return false;
}else{
//未完成的话,流程继续暂停
return true;
}
}