public SagaBuilder end() { saga = saga.endEvent("End-" + name); return this; }
.compensateEventDefinition() .compensateEventDefinitionDone() .endEvent() .done();
@Test public void triggerConditionalEventWithTransientVariable() { // given BpmnModelInstance instance = Bpmn.createExecutableProcess(CONDITIONAL_PROCESS_KEY) .startEvent() .serviceTask() .camundaClass(SetVariableTransientDelegate.class.getName()) .intermediateCatchEvent(CONDITION_ID) .conditionalEventDefinition() .condition(VAR_CONDITION) .conditionalEventDefinitionDone() .endEvent() .done(); testRule.deploy(instance); // when ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(CONDITIONAL_PROCESS_KEY); // then assertEquals(true, processInstance.isEnded()); }
/** * This will deploy the mock process. * * @param rule * @return */ public Deployment deploy(final ProcessEngineRule rule){ return DeployProcess.INSTANCE.apply(rule, flowNodeBuilder .endEvent("end") .done(), this.processId); }
.condition("${variable == 1}") .conditionalEventDefinitionDone() .endEvent().done();
@Test public void testProcessWithIntermediateConditionalEvent() { //given BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .serviceTask() .camundaClass(CheckDelayedVariablesDelegate.class.getName()) .intermediateCatchEvent() .conditionalEventDefinition() .condition("${var==1}") .conditionalEventDefinitionDone() .endEvent() .done(); //when process is deployed and instance created rule.manageDeployment(rule.getRepositoryService().createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); ProcessInstanceWithVariablesImpl processInstance = (ProcessInstanceWithVariablesImpl) rule.getRuntimeService().startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); //then process definition contains property which indicates that conditional events exists Object property = processInstance.getExecutionEntity().getProcessDefinition().getProperty(BpmnParse.PROPERTYNAME_HAS_CONDITIONAL_EVENTS); assertNotNull(property); assertEquals(Boolean.TRUE, property); }
public void testRetryOnServiceTaskLikeMessageThrowEvent() { // given BpmnModelInstance bpmnModelInstance = Bpmn.createExecutableProcess("process") .startEvent() .intermediateThrowEvent() .camundaAsyncBefore() .camundaFailedJobRetryTimeCycle("R10/PT5S") .messageEventDefinition("messageDefinition") .message("message") .messageEventDefinitionDone() .endEvent() .done(); MessageEventDefinition messageDefinition = bpmnModelInstance.getModelElementById("messageDefinition"); messageDefinition.setCamundaClass(FailingDelegate.class.getName()); deployment(bpmnModelInstance); runtimeService.startProcessInstanceByKey("process"); Job job = managementService.createJobQuery().singleResult(); // when job fails try { managementService.executeJob(job.getId()); } catch (Exception e) { // ignore } // then job = managementService.createJobQuery().singleResult(); Assert.assertEquals(9, job.getRetries()); }
.condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .endEvent().done();
.condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .endEvent().done();
.waitForCompletion(true) .compensateEventDefinitionDone() .endEvent() .done();
@Test public void testProcessWithBoundaryConditionalEvent() { //given BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .serviceTask() .camundaClass(CheckDelayedVariablesDelegate.class.getName()) .userTask(TASK_WITH_CONDITION_ID) .endEvent() .done(); modelInstance = modify(modelInstance).userTaskBuilder(TASK_WITH_CONDITION_ID) .boundaryEvent() .conditionalEventDefinition() .condition("${var==1}") .conditionalEventDefinitionDone() .endEvent() .done(); //when process is deployed and instance created rule.manageDeployment(rule.getRepositoryService().createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); ProcessInstanceWithVariablesImpl processInstance = (ProcessInstanceWithVariablesImpl) rule.getRuntimeService().startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); //then process definition contains property which indicates that conditional events exists Object property = processInstance.getExecutionEntity().getProcessDefinition().getProperty(BpmnParse.PROPERTYNAME_HAS_CONDITIONAL_EVENTS); assertNotNull(property); assertEquals(Boolean.TRUE, property); }
@Test public void testProcessWithEventSubProcessConditionalEvent() { //given BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .serviceTask() .camundaClass(CheckDelayedVariablesDelegate.class.getName()) .userTask() .endEvent() .done(); modelInstance = modify(modelInstance).addSubProcessTo(CONDITIONAL_EVENT_PROCESS_KEY) .triggerByEvent() .embeddedSubProcess() .startEvent() .conditionalEventDefinition() .condition("${var==1}") .conditionalEventDefinitionDone() .endEvent() .done(); //when process is deployed and instance created rule.manageDeployment(rule.getRepositoryService().createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); ProcessInstanceWithVariablesImpl processInstance = (ProcessInstanceWithVariablesImpl) rule.getRuntimeService().startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); //then process definition contains property which indicates that conditional events exists Object property = processInstance.getExecutionEntity().getProcessDefinition().getProperty(BpmnParse.PROPERTYNAME_HAS_CONDITIONAL_EVENTS); assertNotNull(property); assertEquals(Boolean.TRUE, property); }
public SagaBuilder triggerCompensationOnAnyError() { process.eventSubProcess() .startEvent("ErrorCatched").error("java.lang.Throwable") .intermediateThrowEvent("ToBeCompensated").compensateEventDefinition().compensateEventDefinitionDone() .endEvent("ErrorHandled"); return this; }
.compensateEventDefinition() .compensateEventDefinitionDone() .endEvent() .done());
@Test public void testSuspendedProcess() { final BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .intermediateCatchEvent(CONDITIONAL_EVENT) .conditionalEventDefinition() .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .endEvent().done(); engine.manageDeployment(repositoryService.createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); // given suspended process ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); runtimeService.suspendProcessInstanceById(procInst.getId()); //when wrong variable is set runtimeService.setVariable(procInst.getId(), VARIABLE_NAME+1, 1); //then nothing happens assertTrue(runtimeService.createProcessInstanceQuery().singleResult().isSuspended()); //when variable which triggers condition is set //then exception is expected try { runtimeService.setVariable(procInst.getId(), VARIABLE_NAME, 1); fail("Should fail!"); } catch (SuspendedEntityInteractionException seie) { //expected } runtimeService.activateProcessInstanceById(procInst.getId()); tasksAfterVariableIsSet = taskService.createTaskQuery().list(); }
@Test public void triggerConditionalEventWithTransientVariable() { // given BpmnModelInstance instance = Bpmn.createExecutableProcess(CONDITIONAL_PROCESS_KEY) .startEvent() .serviceTask() .camundaClass(SetVariableTransientDelegate.class.getName()) .intermediateCatchEvent(CONDITION_ID) .conditionalEventDefinition() .condition(VAR_CONDITION) .conditionalEventDefinitionDone() .endEvent() .done(); testRule.deploy(instance); // when ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(CONDITIONAL_PROCESS_KEY); // then assertEquals(true, processInstance.isEnded()); }
/** 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() {
@Test public void testProcessWithIntermediateConditionalEvent() { //given BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .serviceTask() .camundaClass(CheckDelayedVariablesDelegate.class.getName()) .intermediateCatchEvent() .conditionalEventDefinition() .condition("${var==1}") .conditionalEventDefinitionDone() .endEvent() .done(); //when process is deployed and instance created rule.manageDeployment(rule.getRepositoryService().createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); ProcessInstanceWithVariablesImpl processInstance = (ProcessInstanceWithVariablesImpl) rule.getRuntimeService().startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); //then process definition contains property which indicates that conditional events exists Object property = processInstance.getExecutionEntity().getProcessDefinition().getProperty(BpmnParse.PROPERTYNAME_HAS_CONDITIONAL_EVENTS); assertNotNull(property); assertEquals(Boolean.TRUE, property); }
public void testRetryOnServiceTaskLikeMessageThrowEvent() { // given BpmnModelInstance bpmnModelInstance = Bpmn.createExecutableProcess("process") .startEvent() .intermediateThrowEvent() .camundaAsyncBefore() .camundaFailedJobRetryTimeCycle("R10/PT5S") .messageEventDefinition("messageDefinition") .message("message") .messageEventDefinitionDone() .endEvent() .done(); MessageEventDefinition messageDefinition = bpmnModelInstance.getModelElementById("messageDefinition"); messageDefinition.setCamundaClass(FailingDelegate.class.getName()); deployment(bpmnModelInstance); runtimeService.startProcessInstanceByKey("process"); Job job = managementService.createJobQuery().singleResult(); // when job fails try { managementService.executeJob(job.getId()); } catch (Exception e) { // ignore } // then job = managementService.createJobQuery().singleResult(); Assert.assertEquals(9, job.getRetries()); }
@Test public void testProcessWithBoundaryConditionalEvent() { //given BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .serviceTask() .camundaClass(CheckDelayedVariablesDelegate.class.getName()) .userTask(TASK_WITH_CONDITION_ID) .endEvent() .done(); modelInstance = modify(modelInstance).userTaskBuilder(TASK_WITH_CONDITION_ID) .boundaryEvent() .conditionalEventDefinition() .condition("${var==1}") .conditionalEventDefinitionDone() .endEvent() .done(); //when process is deployed and instance created rule.manageDeployment(rule.getRepositoryService().createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); ProcessInstanceWithVariablesImpl processInstance = (ProcessInstanceWithVariablesImpl) rule.getRuntimeService().startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); //then process definition contains property which indicates that conditional events exists Object property = processInstance.getExecutionEntity().getProcessDefinition().getProperty(BpmnParse.PROPERTYNAME_HAS_CONDITIONAL_EVENTS); assertNotNull(property); assertEquals(Boolean.TRUE, property); }