private InputStream createMockDeploymentResourceBpmnDataNonExecutableProcess() { // do not close the input stream, will be done in implementation String model = Bpmn.convertToString(Bpmn.createProcess().startEvent().endEvent().done()); InputStream inputStream = new ByteArrayInputStream(model.getBytes()); return inputStream; }
@Test public void testSetLocalScopeInSubprocessWithEndExecutionListener() { testHelper.deploy(Bpmn.createExecutableProcess("process") .startEvent() .subProcess().embeddedSubProcess() .startEvent() .endEvent().id("activityId") .camundaExecutionListenerClass(ExecutionListener.EVENTNAME_END, ExecutionListener.class) .subProcessDone() .endEvent() .done()); engineRule.getRuntimeService().startProcessInstanceByKey("process"); }
@Override public EndEventBuilder builder() { return new EndEventBuilder((BpmnModelInstance) modelInstance, this); } }
@Test public void testSetLocalScopeWithExecutionListenerEnd() { testHelper.deploy(Bpmn.createExecutableProcess("process") .startEvent() .endEvent().id("activityId") .camundaExecutionListenerClass(ExecutionListener.EVENTNAME_END, ExecutionListener.class) .done()); engineRule.getRuntimeService().startProcessInstanceByKey("process"); }
public static final BpmnModelInstance subProcessProcess(String key) { return Bpmn.createExecutableProcess(key) .startEvent() .subProcess() .camundaExecutionListenerClass(ExecutionListener.EVENTNAME_START, InstantiationListener.class.getName()) .camundaExecutionListenerClass(ExecutionListener.EVENTNAME_END, RemovalListener.class.getName()) .embeddedSubProcess() .startEvent() .userTask("userTask") .endEvent() .subProcessDone() .endEvent() .done(); }
.userTask(USER_TASK_ID) .endEvent() .subProcessDone() .endEvent() .done()) .userTaskBuilder(USER_TASK_ID) .boundaryEvent(BOUNDARY_ID) .condition(VAR_CONDITION) .endEvent() .moveToActivity(SUB_PROCESS_ID) .boundaryEvent() .condition(VAR_CONDITION) .userTask(TASK_AFTER_CONDITION_ID) .endEvent() .done()); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(ProcessModels.ONE_TASK_PROCESS) .userTaskBuilder(USER_TASK_ID) .userTask(TASK_AFTER_CONDITION_ID) .endEvent() .done());
public void testBoundaryEventIncidentActivityId() { deployment(Bpmn.createExecutableProcess("process") .startEvent() .userTask("userTask") .endEvent() .moveToActivity("userTask") .boundaryEvent("boundaryEvent") .timerWithDuration("PT5S") .endEvent() .done()); // given runtimeService.startProcessInstanceByKey("process"); Job timerJob = managementService.createJobQuery().singleResult(); // when creating an incident managementService.setJobRetries(timerJob.getId(), 0); // then Incident incident = runtimeService.createIncidentQuery().singleResult(); assertNotNull(incident); assertEquals("boundaryEvent", incident.getActivityId()); }
.camundaExecutionListenerClass(EVENTNAME_START, ShiftTimeByOneMinuteListener.class.getName()) .endEvent("endEvent") .camundaExecutionListenerClass(EVENTNAME_START, ShiftTimeByOneMinuteListener.class.getName()) .done(); testHelper.deploy(simpleDefinition); ClockUtil.setCurrentTime(new Date());
public void testEndEvent() throws Exception { BpmnModelInstance bpmnModelInstance = Bpmn.createExecutableProcess("process") .startEvent() .endEvent() .camundaAsyncBefore() .camundaFailedJobRetryTimeCycle("R5/PT5M") .camundaExecutionListenerClass("start", "foo") .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()); }
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); } }
@Test public void testAddErrorBoundaryEventToSubProcessAndThrowError() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(ProcessModels.SUBPROCESS_PROCESS) .endEventBuilder("subProcessEnd") .error(ERROR_CODE) // let the end event of the subprocess throw an error .moveToActivity("subProcess") .boundaryEvent().error(ERROR_CODE) .userTask(AFTER_BOUNDARY_TASK) .endEvent() .done() ); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("subProcess", "subProcess") .mapActivities("userTask", "userTask") .build(); // when testHelper.createProcessInstanceAndMigrate(migrationPlan); // then it is possible to successfully complete the migrated instance testHelper.completeTask("userTask"); testHelper.completeTask(AFTER_BOUNDARY_TASK); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }
@Test public void testAddEscalationBoundaryEventToSubProcessAndThrowEscalation() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(ProcessModels.SUBPROCESS_PROCESS) .endEventBuilder("subProcessEnd").escalation(ESCALATION_CODE) // let the end event of the subprocess escalate .moveToActivity("subProcess") .boundaryEvent().escalation(ESCALATION_CODE) // catch escalation with boundary event .userTask(AFTER_BOUNDARY_TASK) .endEvent() .done() ); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("subProcess", "subProcess") .mapActivities("userTask", "userTask") .build(); // when testHelper.createProcessInstanceAndMigrate(migrationPlan); // then it is possible to successfully complete the migrated instance testHelper.completeTask("userTask"); testHelper.completeTask(AFTER_BOUNDARY_TASK); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }
@Override public BpmnModelInstance getSourceProcess() { return modify(ProcessModels.SUBPROCESS_PROCESS) .addSubProcessTo(EventSubProcessModels.SUB_PROCESS_ID) .triggerByEvent() .embeddedSubProcess() .startEvent(EVENT_SUB_PROCESS_START_ID).signal(EventSubProcessModels.SIGNAL_NAME) .userTask(EVENT_SUB_PROCESS_TASK_ID) .endEvent() .subProcessDone() .done(); }
public void testPropagateTenantIdToEmbeddedSubprocess() { deploymentForTenant(TENANT_ID, Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY) .startEvent() .subProcess() .embeddedSubProcess() .startEvent() .userTask() .endEvent() .subProcessDone() .endEvent() .done()); startProcessInstance(PROCESS_DEFINITION_KEY); List<Execution> executions = runtimeService.createExecutionQuery().list(); assertThat(executions.size(), is(2)); assertThat(executions.get(0).getTenantId(), is(TENANT_ID)); // inherit the tenant id from parent execution (e.g. process instance) assertThat(executions.get(1).getTenantId(), is(TENANT_ID)); }
.userTask(TASK_AFTER_CONDITION_ID) .endEvent() .done()); .userTask(USER_TASK_ID) .endEvent() .subProcessDone() .endEvent() .done()) .userTaskBuilder(USER_TASK_ID) .boundaryEvent(BOUNDARY_ID) .condition(VAR_CONDITION) .endEvent() .moveToActivity(SUB_PROCESS_ID) .boundaryEvent() .condition(VAR_CONDITION) .userTask(TASK_AFTER_CONDITION_ID) .endEvent() .done());
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()); }
private void createFlow() { engine.getRepositoryService().createDeployment() // .addModelInstance("order.bpmn", Bpmn.createProcess("order").executable() // .startEvent() .serviceTask().name("Retrieve payment").camundaClass(RetrievePaymentAdapter.class.getName()) .serviceTask().name("Fetch goods").camundaClass(FetchGoodsAdapter.class.getName()) .serviceTask().name("Ship goods").camundaClass(ShipGoodsAdapter.class.getName()) .endEvent().camundaExecutionListenerClass("end", OrderDeliveredAdapter.class.getName()) .done() ).deploy(); }
public void testEndEvent() throws Exception { BpmnModelInstance bpmnModelInstance = Bpmn.createExecutableProcess("process") .startEvent() .endEvent() .camundaAsyncBefore() .camundaFailedJobRetryTimeCycle("R5/PT5M") .camundaExecutionListenerClass("start", "foo") .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()); }
@Test public void testSetLocalScopeWithExecutionListenerEnd() { testHelper.deploy(Bpmn.createExecutableProcess("process") .startEvent() .endEvent().id("activityId") .camundaExecutionListenerClass(ExecutionListener.EVENTNAME_END, ExecutionListener.class) .done()); engineRule.getRuntimeService().startProcessInstanceByKey("process"); }
@Test public void testAddErrorBoundaryEventToSubProcessAndThrowError() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(ProcessModels.SUBPROCESS_PROCESS) .endEventBuilder("subProcessEnd") .error(ERROR_CODE) // let the end event of the subprocess throw an error .moveToActivity("subProcess") .boundaryEvent().error(ERROR_CODE) .userTask(AFTER_BOUNDARY_TASK) .endEvent() .done() ); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("subProcess", "subProcess") .mapActivities("userTask", "userTask") .build(); // when testHelper.createProcessInstanceAndMigrate(migrationPlan); // then it is possible to successfully complete the migrated instance testHelper.completeTask("userTask"); testHelper.completeTask(AFTER_BOUNDARY_TASK); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }