@Override public ParallelGatewayBuilder builder() { return new ParallelGatewayBuilder((BpmnModelInstance) modelInstance, this); }
public void testConcurrentExecution() { deploymentForTenant("tenant1", Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY) .startEvent() .parallelGateway("fork") .serviceTask() .camundaClass(AssertingJavaDelegate.class.getName()) .parallelGateway("join") .endEvent() .moveToNode("fork") .serviceTask() .camundaClass(AssertingJavaDelegate.class.getName()) .connectTo("join") .done()); AssertingJavaDelegate.addAsserts(hasTenantId("tenant1")); startProcessInstance(PROCESS_DEFINITION_KEY); }
.startEvent() .parallelGateway("split") .callActivity() .calledElement(CALLED_AND_CALLING_PROCESS_KEY) .moveToNode("split")
public void testPropagateTenantIdToConcurrentExecution() { deploymentForTenant(TENANT_ID, Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY) .startEvent() .parallelGateway("fork") .userTask() .parallelGateway("join") .endEvent() .moveToNode("fork") .userTask() .connectTo("join") .done()); startProcessInstance(PROCESS_DEFINITION_KEY); List<Execution> executions = runtimeService.createExecutionQuery().list(); assertThat(executions.size(), is(3)); assertThat(executions.get(0).getTenantId(), is(TENANT_ID)); // inherit the tenant id from process instance assertThat(executions.get(1).getTenantId(), is(TENANT_ID)); assertThat(executions.get(2).getTenantId(), is(TENANT_ID)); }
public void testParallelGateway() throws Exception { BpmnModelInstance bpmnModelInstance = Bpmn.createExecutableProcess("process") .startEvent() .parallelGateway() .camundaAsyncBefore() .camundaFailedJobRetryTimeCycle("R5/PT5M") .camundaExecutionListenerClass("start", "foo") .endEvent() .done(); deployment(bpmnModelInstance); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); Date startDate = simpleDateFormat.parse("2018-01-01T10:00:00"); ClockUtil.setCurrentTime(startDate); runtimeService.startProcessInstanceByKey("process"); Job job = managementService.createJobQuery().singleResult(); // assume Assert.assertEquals(3, job.getRetries()); // when job fails try { managementService.executeJob(job.getId()); } catch (Exception e) { // ignore } // then job = managementService.createJobQuery().singleResult(); Assert.assertEquals(4, job.getRetries()); Date expectedDate = simpleDateFormat.parse("2018-01-01T10:05:00"); assertEquals(expectedDate, ((JobEntity) job).getLockExpirationTime()); }
Bpmn.createExecutableProcess("parentProcess").startEvent() .parallelGateway() .serviceTask("doNothingServiceTask").camundaExpression("${true}") .moveToLastGateway() .callActivity("callActivity").calledElement("subprocess") .parallelGateway("mergingParallelGateway") .userTask() .endEvent() .done();
/** just for visualization, needed on blog post / slide **/ private void createComplexFlow() { engine.getRepositoryService().createDeployment() // .addModelInstance("order.bpmn", Bpmn.createProcess("order").executable() // .startEvent() .serviceTask().name("A") .parallelGateway("fork1") .serviceTask().name("B") .parallelGateway("join2") .moveToNode("fork1") .serviceTask().name("C") .parallelGateway("fork2") .serviceTask().name("D") .parallelGateway("join1") .moveToNode("fork2") .serviceTask().name("E") .connectTo("join1") .connectTo("join2") .endEvent() .done() ).deploy(); } private void createCompensationFlow() {
protected void deployParallelProcessWithEventBasedGateway() { BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .parallelGateway() .id(PARALLEL_GATEWAY_ID) .userTask(TASK_BEFORE_EVENT_BASED_GW_ID) .eventBasedGateway() .id(EVENT_BASED_GATEWAY_ID) .intermediateCatchEvent() .conditionalEventDefinition() .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .userTask() .name(TASK_AFTER_CONDITION) .endEvent() .moveToNode(PARALLEL_GATEWAY_ID) .userTask(TASK_BEFORE_SERVICE_TASK_ID) .serviceTask() .camundaClass(SetVariableDelegate.class.getName()) .endEvent() .done(); engine.manageDeployment(repositoryService.createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); }
private BpmnModelInstance prepareComplexProcess(String calledProcessA,String calledProcessB,String calledProcessC) { BpmnModelInstance calling = Bpmn.createExecutableProcess("calling") .startEvent() .parallelGateway("fork1") .subProcess() .embeddedSubProcess() .startEvent() .parallelGateway("fork2") .callActivity("callingA") .calledElement(calledProcessA) .endEvent("endA") .moveToNode("fork2") .callActivity("callingB") .calledElement(calledProcessB) .endEvent() .subProcessDone() .moveToNode("fork1") .callActivity("callingC") .calledElement(calledProcessC) .endEvent() .done(); return calling; }
.camundaAsyncBefore() .parallelGateway("parallel") .serviceTask("external") .camundaType("external") .camundaTopic("external")
@Test public void testTerminatedInternalWithGateway() { BpmnModelInstance instance = Bpmn.createExecutableProcess(PROCESS_ID) .startEvent() .parallelGateway() .endEvent() .moveToLastGateway() .endEvent(TERMINATION) .done(); initEndEvent(instance, TERMINATION); ProcessDefinition processDefinition = processEngineTestRule.deployAndGetDefinition(instance); processEngineRule.getRuntimeService().startProcessInstanceById(processDefinition.getId()); HistoricProcessInstance entity = getHistoricProcessInstanceWithAssertion(processDefinition); assertThat(entity.getState(), is(HistoricProcessInstance.STATE_COMPLETED)); }
@Test public void testParallelExecutions() { // given BpmnModelInstance instance = Bpmn.createExecutableProcess("Process") .startEvent() .parallelGateway() .scriptTask() .scriptFormat("javascript") .camundaResultVariable("abc") .scriptText("execution.setVariableLocal('abc', foo);") .endEvent() .moveToLastGateway() .scriptTask() .scriptFormat("javascript") .camundaResultVariable("abc") .scriptText("execution.setVariableLocal('abc', foo);") .endEvent() .done(); testRule.deploy(instance); // when runtimeService.startProcessInstanceByKey("Process", Variables.createVariables().putValueTyped("foo", Variables.stringValue("bar", true))); // then List<VariableInstance> variables = runtimeService.createVariableInstanceQuery().list(); assertEquals(0, variables.size()); List<HistoricVariableInstance> historicVariables = historyService.createHistoricVariableInstanceQuery().variableName("abc").list(); assertEquals(2, historicVariables.size()); }
public void testParallelGateway() throws Exception { BpmnModelInstance bpmnModelInstance = Bpmn.createExecutableProcess("process") .startEvent() .parallelGateway() .camundaAsyncBefore() .camundaFailedJobRetryTimeCycle("R5/PT5M") .camundaExecutionListenerClass("start", "foo") .endEvent() .done(); deployment(bpmnModelInstance); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); Date startDate = simpleDateFormat.parse("2018-01-01T10:00:00"); ClockUtil.setCurrentTime(startDate); runtimeService.startProcessInstanceByKey("process"); Job job = managementService.createJobQuery().singleResult(); // assume Assert.assertEquals(3, job.getRetries()); // when job fails try { managementService.executeJob(job.getId()); } catch (Exception e) { // ignore } // then job = managementService.createJobQuery().singleResult(); Assert.assertEquals(4, job.getRetries()); Date expectedDate = simpleDateFormat.parse("2018-01-01T10:05:00"); assertEquals(expectedDate, ((JobEntity) job).getLockExpirationTime()); }
Bpmn.createExecutableProcess("parentProcess").startEvent() .parallelGateway() .serviceTask("doNothingServiceTask").camundaExpression("${true}") .moveToLastGateway() .callActivity("callActivity").calledElement("subprocess") .parallelGateway("mergingParallelGateway") .userTask() .endEvent() .done();
public void testPropagateTenantIdToConcurrentExecution() { deploymentForTenant(TENANT_ID, Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY) .startEvent() .parallelGateway("fork") .userTask() .parallelGateway("join") .endEvent() .moveToNode("fork") .userTask() .connectTo("join") .done()); startProcessInstance(PROCESS_DEFINITION_KEY); List<Execution> executions = runtimeService.createExecutionQuery().list(); assertThat(executions.size(), is(3)); assertThat(executions.get(0).getTenantId(), is(TENANT_ID)); // inherit the tenant id from process instance assertThat(executions.get(1).getTenantId(), is(TENANT_ID)); assertThat(executions.get(2).getTenantId(), is(TENANT_ID)); }
private BpmnModelInstance prepareComplexProcess(String calledProcessA,String calledProcessB,String calledProcessC) { BpmnModelInstance calling = Bpmn.createExecutableProcess("calling") .startEvent() .parallelGateway("fork1") .subProcess() .embeddedSubProcess() .startEvent() .parallelGateway("fork2") .callActivity("callingA") .calledElement(calledProcessA) .endEvent("endA") .moveToNode("fork2") .callActivity("callingB") .calledElement(calledProcessB) .endEvent() .subProcessDone() .moveToNode("fork1") .callActivity("callingC") .calledElement(calledProcessC) .endEvent() .done(); return calling; }
.camundaAsyncBefore() .parallelGateway("parallel") .serviceTask("external") .camundaType("external") .camundaTopic("external")
public void testOutputParameterAvailableAfterParallelGateway() { // given BpmnModelInstance processDefinition = Bpmn.createExecutableProcess("process") .startEvent() .serviceTask() .camundaOutputParameter("variable", "A") .camundaExpression("${'this value does not matter'}") .parallelGateway("fork") .endEvent() .moveToNode("fork") .serviceTask().camundaExpression("${variable}") .receiveTask() .endEvent() .done(); // when deployment(processDefinition); runtimeService.startProcessInstanceByKey("process"); // then VariableInstance variableInstance = runtimeService .createVariableInstanceQuery() .variableName("variable") .singleResult(); assertNotNull(variableInstance); }
@Test public void testParallelExecutions() { // given BpmnModelInstance instance = Bpmn.createExecutableProcess("Process") .startEvent() .parallelGateway() .scriptTask() .scriptFormat("javascript") .camundaResultVariable("abc") .scriptText("execution.setVariableLocal('abc', foo);") .endEvent() .moveToLastGateway() .scriptTask() .scriptFormat("javascript") .camundaResultVariable("abc") .scriptText("execution.setVariableLocal('abc', foo);") .endEvent() .done(); testRule.deploy(instance); // when runtimeService.startProcessInstanceByKey("Process", Variables.createVariables().putValueTyped("foo", Variables.stringValue("bar", true))); // then List<VariableInstance> variables = runtimeService.createVariableInstanceQuery().list(); assertEquals(0, variables.size()); List<HistoricVariableInstance> historicVariables = historyService.createHistoricVariableInstanceQuery().variableName("abc").list(); assertEquals(2, historicVariables.size()); }