protected BpmnModelInstance getBpmnModelInstance() { return Bpmn.createExecutableProcess(PROCESS_ID) .startEvent() .callActivity(CALL_ACTIVITY) .calledElement(SUB_PROCESS_ID) .multiInstance() .cardinality("2") .multiInstanceDone() .endEvent() .done(); }
.subProcessDone() .multiInstance().camundaCollection("${vars}").camundaElementVariable("loopVar").multiInstanceDone() .endEvent().done();
.subProcessDone() .multiInstance().camundaCollection("${vars}").camundaElementVariable("loopVar").multiInstanceDone() .endEvent().done();
.subProcessDone() .multiInstance().camundaCollection("${vars}").camundaElementVariable("loopVar").multiInstanceDone() .endEvent().done();
.subProcessDone() .multiInstance().camundaCollection("${vars}").camundaElementVariable("loopVar").multiInstanceDone() .endEvent().done();
.subProcessDone() .multiInstance().camundaCollection("${vars}").camundaElementVariable("loopVar").multiInstanceDone() .endEvent().done();
@Test public void shouldScheduleToNow() { // given testRule.deploy(Bpmn.createExecutableProcess("process") .camundaHistoryTimeToLive(5) .startEvent() .serviceTask().camundaExternalTask("anExternalTaskTopic") .multiInstance() .cardinality("5") .multiInstanceDone() .endEvent().done()); ClockUtil.setCurrentTime(END_DATE); runtimeService.startProcessInstanceByKey("process"); for (int i = 0; i < 5; i++) { LockedExternalTask externalTask = externalTaskService.fetchAndLock(1, "aWorkerId") .topic("anExternalTaskTopic", 2000) .execute() .get(0); externalTaskService.complete(externalTask.getId(), "aWorkerId"); } engineConfiguration.setHistoryCleanupBatchSize(5); engineConfiguration.initHistoryCleanup(); Date removalTime = addDays(END_DATE, 5); ClockUtil.setCurrentTime(removalTime); // when runHistoryCleanup(); Job job = historyService.findHistoryCleanupJobs().get(0); // then assertThat(job.getDuedate(), is(removalTime)); }
@Test public void testIntermediateCatchEventMessageCorrelation() { //given BpmnModelInstance model = Bpmn.createExecutableProcess("Process_1") .startEvent() .subProcess("SubProcess_1").embeddedSubProcess() .startEvent() .intermediateCatchEvent("MessageReceiver_1").message(TEST_MESSAGE_NAME) .camundaInputParameter("localVar", "${loopVar}") .userTask("UserTask_1") .endEvent() .subProcessDone() .multiInstance().camundaCollection("${vars}").camundaElementVariable("loopVar").multiInstanceDone() .endEvent().done(); testHelper.deploy(model); Map<String, Object> variables = new HashMap<String, Object>(); variables.put("vars", Arrays.asList(1, 2, 3)); ProcessInstance processInstance = engineRule.getRuntimeService().startProcessInstanceByKey("Process_1", variables); //when correlated by local variables String messageName = TEST_MESSAGE_NAME; int correlationKey = 1; MessageCorrelationResult messageCorrelationResult = engineRule.getRuntimeService().createMessageCorrelation(messageName) .localVariableEquals("localVar", correlationKey).setVariables(Variables.createVariables().putValue("newVar", "newValue")).correlateWithResult(); //then one message is correlated, two others continue waiting checkExecutionMessageCorrelationResult(messageCorrelationResult, processInstance, "MessageReceiver_1"); //uncorrelated executions List<Execution> uncorrelatedExecutions = engineRule.getRuntimeService().createExecutionQuery().activityId("MessageReceiver_1").list(); assertEquals(2, uncorrelatedExecutions.size()); }
@Test public void shouldScheduleToLater() { // given testRule.deploy(Bpmn.createExecutableProcess("process") .camundaHistoryTimeToLive(5) .startEvent() .serviceTask().camundaExternalTask("anExternalTaskTopic") .multiInstance() .cardinality("5") .multiInstanceDone() .endEvent().done()); ClockUtil.setCurrentTime(END_DATE); runtimeService.startProcessInstanceByKey("process"); for (int i = 0; i < 5; i++) { LockedExternalTask externalTask = externalTaskService.fetchAndLock(1, "aWorkerId") .topic("anExternalTaskTopic", 2000) .execute() .get(0); externalTaskService.complete(externalTask.getId(), "aWorkerId"); } engineConfiguration.setHistoryCleanupBatchSize(6); engineConfiguration.initHistoryCleanup(); Date removalTime = addDays(END_DATE, 5); ClockUtil.setCurrentTime(removalTime); // when runHistoryCleanup(); Job job = historyService.findHistoryCleanupJobs().get(0); // then assertThat(job.getDuedate(), is(addSeconds(removalTime, START_DELAY))); }
@Test public void shouldCompleteParentProcessWithMultiInstance() { final BpmnModelInstance parentProcessInstance = Bpmn.createExecutableProcess("parentProcess") .startEvent() .callActivity("callActivity").calledElement("subprocess") .multiInstance().cardinality("3").multiInstanceDone() .endEvent() .done(); final BpmnModelInstance subprocessInstance = Bpmn.createExecutableProcess("subprocess") .startEvent() .userTask("userTask") .endEvent("subEnd") .done(); testHelper.deploy(parentProcessInstance, subprocessInstance); final String subprocessPrDefId = repositoryService.createProcessDefinitionQuery().processDefinitionKey("subprocess").singleResult().getId(); // given I start the process, which waits at user task inside multiinstance subprocess runtimeService.startProcessInstanceByKey("parentProcess"); final List<ProcessInstance> subprocesses = runtimeService.createProcessInstanceQuery().processDefinitionKey("subprocess").list(); assertEquals(3, subprocesses.size()); // when I do process instance modification runtimeService.createModification(subprocessPrDefId) .cancelAllForActivity("userTask") .startAfterActivity("userTask") .processInstanceIds(collectIds(subprocesses)) .execute(); // then the process should be finished assertThat(runtimeService.createProcessInstanceQuery().count(), is(0L)); }
.cardinality("3") .multiInstanceDone() .endEvent() .userTask() .endEvent()
/** * CAM-8005 - StackOverflowError must not happen. */ @Test public void testDeleteProcessInstancesManyParallelSubprocesses() { final BpmnModelInstance multiInstanceWithSubprocess = Bpmn.createExecutableProcess("multiInstanceWithSubprocess") .startEvent() .subProcess() .embeddedSubProcess() .startEvent() .userTask("userTask") .endEvent() .subProcessDone() .multiInstance().cardinality("300").multiInstanceDone() .endEvent() .done(); testRule.deploy(multiInstanceWithSubprocess); final ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("multiInstanceWithSubprocess"); runtimeService.deleteProcessInstance(processInstance.getId(), "some reason"); assertEquals(0, runtimeService.createProcessInstanceQuery().processInstanceId(processInstance.getId()).count()); }
.cardinality("3") .multiInstanceDone() .endEvent() .subProcessDone() .userTask()
.cardinality("3") .multiInstanceDone() .endEvent() .done();
.cardinality("3") .multiInstanceDone() .endEvent() .subProcessDone() .endEvent()
.cardinality("3") .multiInstanceDone() .endEvent() .userTask() .endEvent()
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()); }
@Test public void testRemoveExecutionSequence() { // given BpmnModelInstance modelInstance = Bpmn.createExecutableProcess("singleTaskProcess") .startEvent() .userTask("taskWithLocalVariables") .camundaExecutionListenerClass("start", TestLocalVariableExecutionListener.class) .camundaTaskListenerClass("delete", TestLocalVariableTaskListener.class) .boundaryEvent() .signal("interruptSignal") .endEvent() .moveToActivity("taskWithLocalVariables") .endEvent() .done(); testRule.deploy(modelInstance); ProcessInstance pi = processEngineRule.getRuntimeService() .startProcessInstanceByKey("singleTaskProcess"); Execution execution = processEngineRule.getRuntimeService() .createExecutionQuery() .variableValueEquals("localVar", "localVarVal") .singleResult(); // when assertNotNull(execution); assertEquals(pi.getId(), execution.getProcessInstanceId()); processEngineRule.getRuntimeService().signal(execution.getId()); // then (see #TestLocalVariableTaskListener::notify) }
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); } }
protected BpmnModelInstance getBpmnModelInstance() { return Bpmn.createExecutableProcess(PROCESS_ID) .startEvent() .callActivity(CALL_ACTIVITY) .calledElement(SUB_PROCESS_ID) .multiInstance() .cardinality("2") .multiInstanceDone() .endEvent() .done(); }