protected Execution queryExecutionById(String id) { return runtimeService .createExecutionQuery() .executionId(id) .singleResult(); }
@Override public ExecutionDto getExecution() { RuntimeService runtimeService = engine.getRuntimeService(); Execution execution = runtimeService.createExecutionQuery().executionId(executionId).singleResult(); if (execution == null) { throw new InvalidRequestException(Status.NOT_FOUND, "Execution with id " + executionId + " does not exist"); } return ExecutionDto.fromExecution(execution); }
@Override public ExecutionDto getExecution() { RuntimeService runtimeService = engine.getRuntimeService(); Execution execution = runtimeService.createExecutionQuery().executionId(executionId).singleResult(); if (execution == null) { throw new InvalidRequestException(Status.NOT_FOUND, "Execution with id " + executionId + " does not exist"); } return ExecutionDto.fromExecution(execution); }
protected ExecutionEntity refreshExecutionEntity(String executionId) { return (ExecutionEntity) runtimeService.createExecutionQuery().executionId(executionId).singleResult(); }
/** * Associate with the provided execution. This starts a unit of work. * * @param executionId * the id of the execution to associate with. * @throw ProcessEngineCdiException * if no such execution exists */ public void associateExecutionById(String executionId) { Execution execution = processEngine.getRuntimeService() .createExecutionQuery() .executionId(executionId) .singleResult(); if(execution == null) { throw new ProcessEngineCdiException("Cannot associate execution by id: no execution with id '"+executionId+"' found."); } associationManager.setExecution(execution); }
@Test public void testGetNonExistingExecution() { ExecutionQuery sampleExecutionQuery = mock(ExecutionQuery.class); when(runtimeServiceMock.createExecutionQuery()).thenReturn(sampleExecutionQuery); when(sampleExecutionQuery.executionId(anyString())).thenReturn(sampleExecutionQuery); when(sampleExecutionQuery.singleResult()).thenReturn(null); String nonExistingExecutionId = "aNonExistingInstanceId"; given().pathParam("id", nonExistingExecutionId) .then().expect().statusCode(Status.NOT_FOUND.getStatusCode()).contentType(ContentType.JSON) .body("type", equalTo(InvalidRequestException.class.getSimpleName())) .body("message", equalTo("Execution with id " + nonExistingExecutionId + " does not exist")) .when().get(EXECUTION_URL); }
@Test public void testGetSingleExecution() { Execution mockExecution = MockProvider.createMockExecution(); ExecutionQuery sampleExecutionQuery = mock(ExecutionQuery.class); when(runtimeServiceMock.createExecutionQuery()).thenReturn(sampleExecutionQuery); when(sampleExecutionQuery.executionId(MockProvider.EXAMPLE_EXECUTION_ID)).thenReturn(sampleExecutionQuery); when(sampleExecutionQuery.singleResult()).thenReturn(mockExecution); given().pathParam("id", MockProvider.EXAMPLE_EXECUTION_ID) .then().expect().statusCode(Status.OK.getStatusCode()) .body("id", equalTo(MockProvider.EXAMPLE_EXECUTION_ID)) .body("ended", equalTo(MockProvider.EXAMPLE_EXECUTION_IS_ENDED)) .body("processInstanceId", equalTo(MockProvider.EXAMPLE_PROCESS_INSTANCE_ID)) .body("tenantId", equalTo(MockProvider.EXAMPLE_TENANT_ID)) .when().get(EXECUTION_URL); }
public void testQueryByInvalidExecutionId() { ExecutionQuery query = runtimeService.createExecutionQuery().executionId("invalid"); assertNull(query.singleResult()); assertEquals(0, query.list().size()); assertEquals(0, query.count()); }
public void testQueryExecutionId() { Execution execution = runtimeService.createExecutionQuery().processDefinitionKey(SEQUENTIAL_PROCESS_KEY).singleResult(); assertNotNull(runtimeService.createExecutionQuery().executionId(execution.getId())); }
@Deployment(resources = { "org/camunda/bpm/engine/test/api/runtime/MessageCorrelationTest.waitForMessageProcess.bpmn20.xml", "org/camunda/bpm/engine/test/api/runtime/MessageCorrelationTest.sendMessageProcess.bpmn20.xml" }) @Test public void testCorrelateAllWithResultTwoTimesInSameTransaction() { // start process that waits for message Map<String, Object> variables = new HashMap<String, Object>(); variables.put("correlationKey", "someCorrelationKey"); ProcessInstance messageWaitProcess = runtimeService.startProcessInstanceByKey("waitForMessageProcess", variables); Execution waitingProcess = runtimeService.createExecutionQuery().executionId(messageWaitProcess.getProcessInstanceId()).singleResult(); Assert.assertNotNull(waitingProcess); // start process that sends two messages with the same correlationKey VariableMap switchScenarioFlag = Variables.createVariables().putValue("allFlag", true); runtimeService.startProcessInstanceByKey("sendMessageProcess", switchScenarioFlag); // waiting process must be finished waitingProcess = runtimeService.createExecutionQuery().executionId(messageWaitProcess.getProcessInstanceId()).singleResult(); Assert.assertNull(waitingProcess); }
@Deployment(resources = { "org/camunda/bpm/engine/test/api/runtime/MessageCorrelationTest.waitForMessageProcess.bpmn20.xml", "org/camunda/bpm/engine/test/api/runtime/MessageCorrelationTest.sendMessageProcess.bpmn20.xml" }) @Test public void testCorrelateWithResultTwoTimesInSameTransaction() { // start process that waits for message Map<String, Object> variables = new HashMap<String, Object>(); variables.put("correlationKey", "someCorrelationKey"); ProcessInstance messageWaitProcess = runtimeService.startProcessInstanceByKey("waitForMessageProcess", variables); Execution waitingProcess = runtimeService.createExecutionQuery().executionId(messageWaitProcess.getProcessInstanceId()).singleResult(); Assert.assertNotNull(waitingProcess); thrown.expect(MismatchingMessageCorrelationException.class); thrown.expectMessage("Cannot correlate message 'waitForCorrelationKeyMessage'"); // start process that sends two messages with the same correlationKey VariableMap switchScenarioFlag = Variables.createVariables().putValue("allFlag", false); runtimeService.startProcessInstanceByKey("sendMessageProcess", switchScenarioFlag); // waiting process must be finished waitingProcess = runtimeService.createExecutionQuery().executionId(messageWaitProcess.getProcessInstanceId()).singleResult(); Assert.assertNull(waitingProcess); }
/** * starting after a task should not respect that tasks asyncAfter setting */ @Deployment public void testStartAfterAsync() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("exclusiveGateway"); String processInstanceId = processInstance.getId(); runtimeService .createProcessInstanceModification(processInstance.getId()) .startAfterActivity("task2") .execute(); // there is now a job for the end event after task2 Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); Execution jobExecution = runtimeService.createExecutionQuery().activityId("end2").executionId(job.getExecutionId()).singleResult(); assertNotNull(jobExecution); // end process completeTasksInOrder("task1"); managementService.executeJob(job.getId()); assertProcessEnded(processInstanceId); }
@Deployment public void testSetVariableLocalOnTaskInsideParallelBranch() { ProcessInstance pi = runtimeService.startProcessInstanceByKey("process"); Task task = taskService.createTaskQuery().singleResult(); assertNotNull(task); taskService.setVariableLocal(task.getId(), "testVar", "testValue"); ExecutionEntity taskExecution = (ExecutionEntity) runtimeService.createExecutionQuery() .executionId(task.getExecutionId()) .singleResult(); assertNotNull(taskExecution); HistoricVariableInstanceQuery query = historyService.createHistoricVariableInstanceQuery(); assertEquals(1, query.count()); HistoricVariableInstance variable = query.singleResult(); // the variable is in the user task scope assertEquals(taskExecution.getActivityInstanceId(), variable.getActivityInstanceId()); taskService.complete(task.getId()); assertProcessEnded(pi.getId()); }
@Deployment(resources={"org/camunda/bpm/engine/test/api/oneTaskProcess.bpmn20.xml"}) public void testSetVariableLocalOnUserTask() { ProcessInstance pi = runtimeService.startProcessInstanceByKey("oneTaskProcess"); Task task = taskService.createTaskQuery().singleResult(); assertNotNull(task); taskService.setVariableLocal(task.getId(), "testVar", "testValue"); ExecutionEntity taskExecution = (ExecutionEntity) runtimeService.createExecutionQuery() .executionId(task.getExecutionId()) .singleResult(); assertNotNull(taskExecution); HistoricVariableInstanceQuery query = historyService.createHistoricVariableInstanceQuery(); assertEquals(1, query.count()); HistoricVariableInstance variable = query.singleResult(); assertNotNull(variable); // the variable is in the task scope assertEquals(taskExecution.getActivityInstanceId(), variable.getActivityInstanceId()); taskService.complete(task.getId()); assertProcessEnded(pi.getId()); }
@Deployment(resources = "org/camunda/bpm/engine/test/api/variables/ExecutionVariablesTest.testTreeCompactionWithLocalVariableOnConcurrentExecution.bpmn20.xml") public void testStableVariableInstanceIdsOnCompaction() { runtimeService.startProcessInstanceByKey("process"); Execution innerTaskExecution = runtimeService .createExecutionQuery() .activityId("innerTask") .singleResult(); Execution subProcessConcurrentExecution = runtimeService .createExecutionQuery() .executionId(((ExecutionEntity) innerTaskExecution).getParentId()) .singleResult(); Task task = taskService .createTaskQuery() .taskDefinitionKey("task") .singleResult(); // when runtimeService.setVariableLocal(subProcessConcurrentExecution.getId(), "foo", "bar"); VariableInstance variableBeforeCompaction = runtimeService.createVariableInstanceQuery().singleResult(); // and completing the concurrent task, thereby pruning the sub process concurrent execution taskService.complete(task.getId()); // then the variable still exists VariableInstance variableAfterCompaction = runtimeService.createVariableInstanceQuery().singleResult(); assertEquals(variableBeforeCompaction.getId(), variableAfterCompaction.getId()); }
@Deployment public void testTreeCompactionWithLocalVariableOnConcurrentExecution() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("process"); Execution innerTaskExecution = runtimeService .createExecutionQuery() .activityId("innerTask") .singleResult(); Execution subProcessConcurrentExecution = runtimeService .createExecutionQuery() .executionId(((ExecutionEntity) innerTaskExecution).getParentId()) .singleResult(); Task task = taskService .createTaskQuery() .taskDefinitionKey("task") .singleResult(); // when runtimeService.setVariableLocal(subProcessConcurrentExecution.getId(), "foo", "bar"); // and completing the concurrent task, thereby pruning the sub process concurrent execution taskService.complete(task.getId()); // then the variable still exists VariableInstance variable = runtimeService.createVariableInstanceQuery().singleResult(); assertNotNull(variable); assertEquals("foo", variable.getName()); assertEquals(processInstance.getId(), variable.getExecutionId()); }
public void testQueryByInvalidExecutionId() { ExecutionQuery query = runtimeService.createExecutionQuery().executionId("invalid"); assertNull(query.singleResult()); assertEquals(0, query.list().size()); assertEquals(0, query.count()); }
private void testInterruptingUnderProcessDefinition(int expectedNumberOfEventSubscriptions) { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("process"); // the process instance must have a message event subscription: Execution execution = runtimeService.createExecutionQuery() .executionId(processInstance.getId()) .messageEventSubscriptionName("newMessage") .singleResult(); assertNotNull(execution); assertEquals(expectedNumberOfEventSubscriptions, createEventSubscriptionQuery().count()); assertEquals(1, runtimeService.createExecutionQuery().count()); // if we trigger the usertask, the process terminates and the event subscription is removed: Task task = taskService.createTaskQuery().singleResult(); assertEquals("task", task.getTaskDefinitionKey()); taskService.complete(task.getId()); assertProcessEnded(processInstance.getId()); assertEquals(0, createEventSubscriptionQuery().count()); assertEquals(0, runtimeService.createExecutionQuery().count()); // now we start a new instance but this time we trigger the event subprocess: processInstance = runtimeService.startProcessInstanceByKey("process"); runtimeService.messageEventReceived("newMessage", processInstance.getId()); task = taskService.createTaskQuery().singleResult(); assertEquals("eventSubProcessTask", task.getTaskDefinitionKey()); taskService.complete(task.getId()); assertProcessEnded(processInstance.getId()); assertEquals(0, createEventSubscriptionQuery().count()); assertEquals(0, runtimeService.createExecutionQuery().count()); }
Execution eventScopeExecution = runtimeService.createExecutionQuery().executionId(eventSubscriptionEntity.getConfiguration()).singleResult(); assertNotNull(eventScopeExecution);
.executionId(processInstance.getId()) .messageEventSubscriptionName("newMessage") .singleResult();