@Override public Void execute(CommandContext commandContext) { final Incident incident = commandContext.getIncidentManager().findIncidentById(incidentId); EnsureUtil.ensureNotNull(NotFoundException.class, "Cannot find an incident with id '" + incidentId + "'", "incident", incident); if (incident.getIncidentType().equals("failedJob") || incident.getIncidentType().equals("failedExternalTask")) { throw new BadUserRequestException("Cannot resolve an incident of type " + incident.getIncidentType()); } EnsureUtil.ensureNotNull(BadUserRequestException.class, "", "executionId", incident.getExecutionId()); ExecutionEntity execution = commandContext.getExecutionManager().findExecutionById(incident.getExecutionId()); EnsureUtil.ensureNotNull(BadUserRequestException.class, "Cannot find an execution for an incident with id '" + incidentId + "'", "execution", execution); for (CommandChecker checker : commandContext.getProcessEngineConfiguration().getCommandCheckers()) { checker.checkUpdateProcessInstance(execution); } execution.resolveIncident(incidentId); return null; } }
@Override public Void execute(CommandContext commandContext) { final Incident incident = commandContext.getIncidentManager().findIncidentById(incidentId); EnsureUtil.ensureNotNull(NotFoundException.class, "Cannot find an incident with id '" + incidentId + "'", "incident", incident); if (incident.getIncidentType().equals("failedJob") || incident.getIncidentType().equals("failedExternalTask")) { throw new BadUserRequestException("Cannot resolve an incident of type " + incident.getIncidentType()); } EnsureUtil.ensureNotNull(BadUserRequestException.class, "", "executionId", incident.getExecutionId()); ExecutionEntity execution = commandContext.getExecutionManager().findExecutionById(incident.getExecutionId()); EnsureUtil.ensureNotNull(BadUserRequestException.class, "Cannot find an execution for an incident with id '" + incidentId + "'", "execution", execution); for (CommandChecker checker : commandContext.getProcessEngineConfiguration().getCommandCheckers()) { checker.checkUpdateProcessInstance(execution); } execution.resolveIncident(incidentId); return null; } }
public static Incident createMockIncident(String tenantId) { Incident incident = mock(Incident.class); when(incident.getId()).thenReturn(EXAMPLE_INCIDENT_ID); when(incident.getIncidentTimestamp()).thenReturn(DateTimeUtil.parseDate(EXAMPLE_INCIDENT_TIMESTAMP)); when(incident.getIncidentType()).thenReturn(EXAMPLE_INCIDENT_TYPE); when(incident.getExecutionId()).thenReturn(EXAMPLE_INCIDENT_EXECUTION_ID); when(incident.getActivityId()).thenReturn(EXAMPLE_INCIDENT_ACTIVITY_ID); when(incident.getProcessInstanceId()).thenReturn(EXAMPLE_INCIDENT_PROC_INST_ID); when(incident.getProcessDefinitionId()).thenReturn(EXAMPLE_INCIDENT_PROC_DEF_ID); when(incident.getCauseIncidentId()).thenReturn(EXAMPLE_INCIDENT_CAUSE_INCIDENT_ID); when(incident.getRootCauseIncidentId()).thenReturn(EXAMPLE_INCIDENT_ROOT_CAUSE_INCIDENT_ID); when(incident.getConfiguration()).thenReturn(EXAMPLE_INCIDENT_CONFIGURATION); when(incident.getIncidentMessage()).thenReturn(EXAMPLE_INCIDENT_MESSAGE); when(incident.getTenantId()).thenReturn(tenantId); when(incident.getJobDefinitionId()).thenReturn(EXAMPLE_JOB_DEFINITION_ID); return incident; }
public static IncidentDto fromIncident(Incident incident) { IncidentDto dto = new IncidentDto(); dto.id = incident.getId(); dto.processDefinitionId = incident.getProcessDefinitionId(); dto.processInstanceId = incident.getProcessInstanceId(); dto.executionId = incident.getExecutionId(); dto.incidentTimestamp = incident.getIncidentTimestamp(); dto.incidentType = incident.getIncidentType(); dto.activityId = incident.getActivityId(); dto.causeIncidentId = incident.getCauseIncidentId(); dto.rootCauseIncidentId = incident.getRootCauseIncidentId(); dto.configuration = incident.getConfiguration(); dto.incidentMessage = incident.getIncidentMessage(); dto.tenantId = incident.getTenantId(); dto.jobDefinitionId = incident.getJobDefinitionId(); return dto; }
public static IncidentDto fromIncident(Incident incident) { IncidentDto dto = new IncidentDto(); dto.id = incident.getId(); dto.processDefinitionId = incident.getProcessDefinitionId(); dto.processInstanceId = incident.getProcessInstanceId(); dto.executionId = incident.getExecutionId(); dto.incidentTimestamp = incident.getIncidentTimestamp(); dto.incidentType = incident.getIncidentType(); dto.activityId = incident.getActivityId(); dto.causeIncidentId = incident.getCauseIncidentId(); dto.rootCauseIncidentId = incident.getRootCauseIncidentId(); dto.configuration = incident.getConfiguration(); dto.incidentMessage = incident.getIncidentMessage(); dto.tenantId = incident.getTenantId(); dto.jobDefinitionId = incident.getJobDefinitionId(); return dto; }
@Deployment(resources={"org/camunda/bpm/engine/test/api/runtime/failingProcessCreateOneIncident.bpmn20.xml"}) public void testQueryByIncidentType() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("failingProcess"); executeAvailableJobs(); List<Incident> incidentList = runtimeService.createIncidentQuery().list(); assertEquals(1, incidentList.size()); Incident incident = runtimeService.createIncidentQuery().processInstanceId(processInstance.getId()).singleResult(); List<Execution> executionList = runtimeService .createExecutionQuery() .incidentType(incident.getIncidentType()).list(); assertEquals(1, executionList.size()); }
@Deployment(resources={"org/camunda/bpm/engine/test/api/runtime/failingSubProcessCreateOneIncident.bpmn20.xml"}) public void testQueryByIncidentTypeInSubprocess() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("failingSubProcess"); executeAvailableJobs(); List<Incident> incidentList = runtimeService.createIncidentQuery().list(); assertEquals(1, incidentList.size()); Incident incident = runtimeService.createIncidentQuery().processInstanceId(processInstance.getId()).singleResult(); List<Execution> executionList = runtimeService .createExecutionQuery() .incidentType(incident.getIncidentType()).list(); assertEquals(1, executionList.size()); // execution id of subprocess != process instance id assertNotSame(processInstance.getId(), executionList.get(0).getId()); }
@Test @Deployment(resources={"org/camunda/bpm/engine/test/api/runtime/failingProcessCreateOneIncident.bpmn20.xml"}) public void testQueryByIncidentType() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("failingProcess"); testHelper.executeAvailableJobs(); List<Incident> incidentList = runtimeService.createIncidentQuery().list(); assertEquals(1, incidentList.size()); Incident incident = runtimeService.createIncidentQuery().processInstanceId(processInstance.getId()).singleResult(); List<ProcessInstance> processInstanceList = runtimeService .createProcessInstanceQuery() .incidentType(incident.getIncidentType()).list(); assertEquals(1, processInstanceList.size()); }
@Test @Deployment(resources={"org/camunda/bpm/engine/test/api/runtime/failingSubProcessCreateOneIncident.bpmn20.xml"}) public void testQueryByIncidentTypeInSubProcess() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("failingSubProcess"); testHelper.executeAvailableJobs(); List<Incident> incidentList = runtimeService.createIncidentQuery().list(); assertEquals(1, incidentList.size()); Incident incident = runtimeService.createIncidentQuery().processInstanceId(processInstance.getId()).singleResult(); List<ProcessInstance> processInstanceList = runtimeService .createProcessInstanceQuery() .incidentType(incident.getIncidentType()).list(); assertEquals(1, processInstanceList.size()); assertEquals(processInstance.getId(), processInstanceList.get(0).getId()); }
@org.camunda.bpm.engine.test.Deployment(resources={"org/camunda/bpm/engine/test/api/repository/failingProcessCreateOneIncident.bpmn20.xml"}) public void testQueryByIncidentType() { assertEquals(1, repositoryService.createProcessDefinitionQuery() .processDefinitionKey("failingProcess") .count()); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("failingProcess"); executeAvailableJobs(); List<Incident> incidentList = runtimeService.createIncidentQuery().list(); assertEquals(1, incidentList.size()); Incident incident = runtimeService.createIncidentQuery().processInstanceId(processInstance.getId()).singleResult(); ProcessDefinitionQuery query = repositoryService .createProcessDefinitionQuery() .incidentType(incident.getIncidentType()); verifyQueryResults(query, 1); }
@Test public void createIncidentWithIncidentHandler() { // given testRule.deploy(ProcessModels.TWO_TASKS_PROCESS); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("Process"); // when Incident incident = runtimeService.createIncident("custom", processInstance.getId(), "configuration"); // then assertNotNull(incident); Incident incident2 = runtimeService.createIncidentQuery().singleResult(); assertNotNull(incident2); assertEquals(incident, incident2); assertEquals("custom", incident.getIncidentType()); assertEquals("configuration", incident.getConfiguration()); }
@Test public void createIncident() { // given testRule.deploy(ProcessModels.TWO_TASKS_PROCESS); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("Process"); // when Incident incident = runtimeService.createIncident("foo", processInstance.getId(), "aa", "bar"); // then Incident incident2 = runtimeService.createIncidentQuery().executionId(processInstance.getId()).singleResult(); assertEquals(incident2.getId(), incident.getId()); assertEquals("foo", incident2.getIncidentType()); assertEquals("aa", incident2.getConfiguration()); assertEquals("bar", incident2.getIncidentMessage()); assertEquals(processInstance.getId(), incident2.getExecutionId()); }
evt.setExecutionId(incident.getExecutionId()); evt.setCreateTime(incident.getIncidentTimestamp()); evt.setIncidentType(incident.getIncidentType()); evt.setActivityId(incident.getActivityId()); evt.setCauseIncidentId(incident.getCauseIncidentId());
assertEquals("externalTask", incident.getActivityId()); assertEquals(incident.getId(), incident.getCauseIncidentId()); assertEquals("failedExternalTask", incident.getIncidentType()); assertEquals(task.getProcessDefinitionId(), incident.getProcessDefinitionId()); assertEquals(task.getProcessInstanceId(), incident.getProcessInstanceId());
@Test public void testCustomIncidentMigrationWithoutConfiguration() { // given RuntimeService runtimeService = engineRule.getRuntimeService(); BpmnModelInstance instance1 = Bpmn.createExecutableProcess("process1").startEvent().userTask("u1").endEvent().done(); BpmnModelInstance instance2 = Bpmn.createExecutableProcess("process2").startEvent().userTask("u2").endEvent().done(); testHelper.deploy(instance1, instance2); ProcessInstance processInstance1 = runtimeService.startProcessInstanceByKey("process1"); ProcessInstance processInstance2 = runtimeService.startProcessInstanceByKey("process2"); MigrationPlan migrationPlan = runtimeService .createMigrationPlan(processInstance1.getProcessDefinitionId(), processInstance2.getProcessDefinitionId()) .mapActivities("u1", "u2") .build(); runtimeService.createIncident("custom", processInstance1.getId(), null); // when runtimeService.newMigration(migrationPlan).processInstanceIds(processInstance1.getId()).execute(); // then Incident incident = runtimeService.createIncidentQuery().singleResult(); assertEquals(processInstance2.getProcessDefinitionId(), incident.getProcessDefinitionId()); assertEquals("custom", incident.getIncidentType()); assertEquals(processInstance1.getId(), incident.getExecutionId()); }
@Test public void testCustomIncidentMigration() { // given RuntimeService runtimeService = engineRule.getRuntimeService(); BpmnModelInstance instance1 = Bpmn.createExecutableProcess("process1").startEvent().userTask("u1").endEvent().done(); BpmnModelInstance instance2 = Bpmn.createExecutableProcess("process2").startEvent().userTask("u2").endEvent().done(); testHelper.deploy(instance1, instance2); ProcessInstance processInstance1 = runtimeService.startProcessInstanceByKey("process1"); ProcessInstance processInstance2 = runtimeService.startProcessInstanceByKey("process2"); MigrationPlan migrationPlan = runtimeService .createMigrationPlan(processInstance1.getProcessDefinitionId(), processInstance2.getProcessDefinitionId()) .mapActivities("u1", "u2") .build(); runtimeService.createIncident("custom", processInstance1.getId(), "foo"); // when runtimeService.newMigration(migrationPlan).processInstanceIds(processInstance1.getId()).execute(); // then Incident incident = runtimeService.createIncidentQuery().singleResult(); assertEquals(processInstance2.getProcessDefinitionId(), incident.getProcessDefinitionId()); assertEquals("custom", incident.getIncidentType()); assertEquals(processInstance1.getId(), incident.getExecutionId()); }
@Deployment(resources = {"org/camunda/bpm/engine/test/api/mgmt/IncidentTest.testShouldCreateOneIncidentForNestedExecution.bpmn"}) public void testShouldCreateOneIncidentForNestedExecution() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("failingProcessWithNestedExecutions"); executeAvailableJobs(); Incident incident = runtimeService.createIncidentQuery().processInstanceId(processInstance.getId()).singleResult(); assertNotNull(incident); Job job = managementService.createJobQuery().processInstanceId(processInstance.getId()).singleResult(); assertNotNull(job); String executionIdOfNestedFailingExecution = job.getExecutionId(); assertFalse(processInstance.getId() == executionIdOfNestedFailingExecution); assertNotNull(incident.getId()); assertNotNull(incident.getIncidentTimestamp()); assertEquals(Incident.FAILED_JOB_HANDLER_TYPE, incident.getIncidentType()); assertEquals(AlwaysFailingDelegate.MESSAGE, incident.getIncidentMessage()); assertEquals(executionIdOfNestedFailingExecution, incident.getExecutionId()); assertEquals("theServiceTask", incident.getActivityId()); assertEquals(processInstance.getId(), incident.getProcessInstanceId()); assertEquals(incident.getId(), incident.getCauseIncidentId()); assertEquals(incident.getId(), incident.getRootCauseIncidentId()); assertEquals(job.getId(), incident.getConfiguration()); assertEquals(job.getJobDefinitionId(), incident.getJobDefinitionId()); }
@Deployment(resources = {"org/camunda/bpm/engine/test/api/mgmt/IncidentTest.testShouldCreateOneIncident.bpmn"}) public void testShouldCreateOneIncident() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("failingProcess"); executeAvailableJobs(); Incident incident = runtimeService.createIncidentQuery().processInstanceId(processInstance.getId()).singleResult(); assertNotNull(incident); assertNotNull(incident.getId()); assertNotNull(incident.getIncidentTimestamp()); assertEquals(Incident.FAILED_JOB_HANDLER_TYPE, incident.getIncidentType()); assertEquals(AlwaysFailingDelegate.MESSAGE, incident.getIncidentMessage()); assertEquals(processInstance.getId(), incident.getExecutionId()); assertEquals("theServiceTask", incident.getActivityId()); assertEquals(processInstance.getId(), incident.getProcessInstanceId()); assertEquals(processInstance.getProcessDefinitionId(), incident.getProcessDefinitionId()); assertEquals(incident.getId(), incident.getCauseIncidentId()); assertEquals(incident.getId(), incident.getRootCauseIncidentId()); Job job = managementService.createJobQuery().processInstanceId(processInstance.getId()).singleResult(); assertNotNull(job); assertEquals(job.getId(), incident.getConfiguration()); assertEquals(job.getJobDefinitionId(), incident.getJobDefinitionId()); }
@Deployment(resources={"org/camunda/bpm/engine/test/api/runtime/oneFailingServiceProcess.bpmn20.xml"}) public void testPropertiesOfHistoricIncident() { startProcessInstance(PROCESS_DEFINITION_KEY); Incident incident = runtimeService.createIncidentQuery().singleResult(); assertNotNull(incident); HistoricIncident historicIncident = historyService.createHistoricIncidentQuery().singleResult(); assertNotNull(historicIncident); assertEquals(incident.getId(), historicIncident.getId()); assertEquals(incident.getIncidentTimestamp(), historicIncident.getCreateTime()); assertNull(historicIncident.getEndTime()); assertEquals(incident.getIncidentType(), historicIncident.getIncidentType()); assertEquals(incident.getIncidentMessage(), historicIncident.getIncidentMessage()); assertEquals(incident.getExecutionId(), historicIncident.getExecutionId()); assertEquals(incident.getActivityId(), historicIncident.getActivityId()); assertEquals(incident.getProcessInstanceId(), historicIncident.getProcessInstanceId()); assertEquals(incident.getProcessDefinitionId(), historicIncident.getProcessDefinitionId()); assertEquals(PROCESS_DEFINITION_KEY, historicIncident.getProcessDefinitionKey()); assertEquals(incident.getCauseIncidentId(), historicIncident.getCauseIncidentId()); assertEquals(incident.getRootCauseIncidentId(), historicIncident.getRootCauseIncidentId()); assertEquals(incident.getConfiguration(), historicIncident.getConfiguration()); assertEquals(incident.getJobDefinitionId(), historicIncident.getJobDefinitionId()); assertTrue(historicIncident.isOpen()); assertFalse(historicIncident.isDeleted()); assertFalse(historicIncident.isResolved()); }
assertEquals(Incident.EXTERNAL_TASK_HANDLER_TYPE, incidentAfterMigration.getIncidentType()); assertEquals(externalTask.getId(), incidentAfterMigration.getConfiguration());