.serviceTask("serviceTask1") .camundaClass(IncreaseCurrentTimeServiceTask.class.getName()) .boundaryEvent("compensationBoundary1") .compensateEventDefinition() .compensateEventDefinitionDone() .serviceTask("serviceTask2") .camundaClass(IncreaseCurrentTimeServiceTask.class.getName()) .boundaryEvent("compensationBoundary2") .compensateEventDefinition() .compensateEventDefinitionDone()
@Test public void testSetVariableInDelegateWithSynchronousEvent() { BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .userTask().name(TASK_BEFORE_CONDITION) .serviceTask(TASK_WITH_CONDITION_ID).camundaClass(SetVariableDelegate.class.getName()) .endEvent().done(); modelInstance = modify(modelInstance) .serviceTaskBuilder(TASK_WITH_CONDITION_ID) .boundaryEvent() .cancelActivity(true) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .done(); engine.manageDeployment(repositoryService.createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); // given ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); //when task is completed taskService.complete(taskQuery.singleResult().getId()); //then service task with delegated code is called and variable is set //-> conditional event is triggered and process instance ends tasksAfterVariableIsSet = taskQuery.list(); assertEquals(0, tasksAfterVariableIsSet.size()); assertEquals(0, conditionEventSubscriptionQuery.list().size()); assertNull(runtimeService.createProcessInstanceQuery().singleResult()); }
@Test public void testNonInterruptingSetVariableInDelegateWithSynchronousEvent() { BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .userTask().name(TASK_BEFORE_CONDITION) .serviceTask(TASK_WITH_CONDITION_ID) .camundaClass(SetVariableDelegate.class.getName()) .userTask() .endEvent().done(); modelInstance = modify(modelInstance) .serviceTaskBuilder(TASK_WITH_CONDITION_ID) .boundaryEvent() .cancelActivity(false) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .done(); engine.manageDeployment(repositoryService.createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); // given process with event sub process conditional start event and service task with delegate class which sets a variable ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); //when task before service task is completed taskService.complete(taskQuery.singleResult().getId()); //then service task with delegated code is called and variable is set //-> non interrupting conditional event is triggered //execution stays at user task after service task tasksAfterVariableIsSet = taskQuery.list(); assertEquals(1, tasksAfterVariableIsSet.size()); assertEquals(0, conditionEventSubscriptionQuery.list().size()); }
public void testAsyncAfterErrorEvent() { // given BpmnModelInstance instance = Bpmn.createExecutableProcess("process") .startEvent() .serviceTask("servTask") .camundaClass(ThrowBpmnErrorDelegate.class) .boundaryEvent() .camundaAsyncAfter(true) .camundaFailedJobRetryTimeCycle("R10/PT10S") .errorEventDefinition() .errorEventDefinitionDone() .serviceTask() .camundaClass("foo") .endEvent() .moveToActivity("servTask") .endEvent().done(); deployment(instance); 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()); }
public static void main(String[] args) { BpmnModelInstance model = Bpmn.createExecutableProcess("payment") .startEvent() .serviceTask().id("charge").name("Charge credit card").camundaClass(ChargeCreditCardAdapter.class.getName()) // .boundaryEvent().error() .serviceTask().name("Ask customer to update credit card").camundaExpression("#{true}") // noop .receiveTask().id("wait").name("Wait for new credit card data").message("CreditCardUpdated") .boundaryEvent().timerWithDuration("PT7D") // 7 days .endEvent().camundaExecutionListenerClass("end", PaymentFailedAdapter.class.getName()) .moveToActivity("wait").connectTo("charge") // loop back with new data .moveToActivity("charge") .endEvent().camundaExecutionListenerClass("end", PaymentCompletedAdapter.class.getName()) .done(); File file = new File("result.bpmn"); Bpmn.writeModelToFile(file, model); } }
.camundaType("external") .camundaTopic("external") .boundaryEvent() .message("message") .moveToNode("parallel")
private void createCompensationFlow() { engine.getRepositoryService().createDeployment() // .addModelInstance("travel.bpmn", Bpmn.createProcess("travel").executable() // .startEvent() .serviceTask().name("Reserve car") //.camundaClass(ReserveCar.class) .boundaryEvent().compensateEventDefinition().activityRef("compensateCar").compensateEventDefinitionDone() .done() ).deploy(); } }
.boundaryEvent().compensateEventDefinition().compensateEventDefinitionDone() .compensationStart().serviceTask("CancelCar").camundaClass(CancelCarAdapter.class).compensationDone() .serviceTask("hotel").name("Book hotel").camundaClass(BookHotelAdapter.class) .boundaryEvent().compensateEventDefinition().compensateEventDefinitionDone() .compensationStart().serviceTask("CancelHotel").camundaClass(CancelHotelAdapter.class).compensationDone() .serviceTask("flight").name("Book flight").camundaClass(BookFlightAdapter.class) .boundaryEvent().compensateEventDefinition().compensateEventDefinitionDone() .compensationStart().serviceTask("CancelFlight").camundaClass(CancelFlightAdapter.class).compensationDone() .endEvent();
.serviceTask("serviceTask1") .camundaClass(IncreaseCurrentTimeServiceTask.class.getName()) .boundaryEvent("compensationBoundary1") .compensateEventDefinition() .compensateEventDefinitionDone() .serviceTask("serviceTask2") .camundaClass(IncreaseCurrentTimeServiceTask.class.getName()) .boundaryEvent("compensationBoundary2") .compensateEventDefinition() .compensateEventDefinitionDone()
@Test public void testNonInterruptingSetVariableInDelegateWithSynchronousEvent() { BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .userTask().name(TASK_BEFORE_CONDITION) .serviceTask(TASK_WITH_CONDITION_ID) .camundaClass(SetVariableDelegate.class.getName()) .userTask() .endEvent().done(); modelInstance = modify(modelInstance) .serviceTaskBuilder(TASK_WITH_CONDITION_ID) .boundaryEvent() .cancelActivity(false) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .done(); engine.manageDeployment(repositoryService.createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); // given process with event sub process conditional start event and service task with delegate class which sets a variable ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); //when task before service task is completed taskService.complete(taskQuery.singleResult().getId()); //then service task with delegated code is called and variable is set //-> non interrupting conditional event is triggered //execution stays at user task after service task tasksAfterVariableIsSet = taskQuery.list(); assertEquals(1, tasksAfterVariableIsSet.size()); assertEquals(0, conditionEventSubscriptionQuery.list().size()); }
@Test public void testSetVariableInDelegateWithSynchronousEvent() { BpmnModelInstance modelInstance = Bpmn.createExecutableProcess(CONDITIONAL_EVENT_PROCESS_KEY) .startEvent() .userTask().name(TASK_BEFORE_CONDITION) .serviceTask(TASK_WITH_CONDITION_ID).camundaClass(SetVariableDelegate.class.getName()) .endEvent().done(); modelInstance = modify(modelInstance) .serviceTaskBuilder(TASK_WITH_CONDITION_ID) .boundaryEvent() .cancelActivity(true) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .done(); engine.manageDeployment(repositoryService.createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); // given ProcessInstance procInst = runtimeService.startProcessInstanceByKey(CONDITIONAL_EVENT_PROCESS_KEY); TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(procInst.getId()); //when task is completed taskService.complete(taskQuery.singleResult().getId()); //then service task with delegated code is called and variable is set //-> conditional event is triggered and process instance ends tasksAfterVariableIsSet = taskQuery.list(); assertEquals(0, tasksAfterVariableIsSet.size()); assertEquals(0, conditionEventSubscriptionQuery.list().size()); assertNull(runtimeService.createProcessInstanceQuery().singleResult()); }
public void testAsyncAfterErrorEvent() { // given BpmnModelInstance instance = Bpmn.createExecutableProcess("process") .startEvent() .serviceTask("servTask") .camundaClass(ThrowBpmnErrorDelegate.class) .boundaryEvent() .camundaAsyncAfter(true) .camundaFailedJobRetryTimeCycle("R10/PT10S") .errorEventDefinition() .errorEventDefinitionDone() .serviceTask() .camundaClass("foo") .endEvent() .moveToActivity("servTask") .endEvent().done(); deployment(instance); 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()); }
.camundaType("external") .camundaTopic("external") .boundaryEvent() .message("message") .moveToNode("parallel")