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 IncidentContext(Incident incident) { this.processDefinitionId = incident.getProcessDefinitionId(); this.activityId = incident.getActivityId(); this.executionId = incident.getExecutionId(); this.configuration = incident.getConfiguration(); this.tenantId = incident.getTenantId(); this.jobDefinitionId = incident.getJobDefinitionId(); }
@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; } }
@Test public void testMigrateEventSubprocessTimerIncident() { ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.TIMER_EVENT_SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.TIMER_EVENT_SUBPROCESS_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID) .build(); ProcessInstance processInstance = rule.getRuntimeService().startProcessInstanceById(sourceProcessDefinition.getId()); Job timerTriggerJob = rule.getManagementService().createJobQuery().singleResult(); // create an incident rule.getManagementService().setJobRetries(timerTriggerJob.getId(), 0); Incident incidentBeforeMigration = rule.getRuntimeService().createIncidentQuery().singleResult(); // when testHelper.migrateProcessInstance(migrationPlan, processInstance); // then Incident incidentAfterMigration = rule.getRuntimeService().createIncidentQuery().singleResult(); assertNotNull(incidentAfterMigration); assertEquals(incidentBeforeMigration.getId(), incidentAfterMigration.getId()); assertEquals(timerTriggerJob.getId(), incidentAfterMigration.getConfiguration()); assertEquals(EVENT_SUB_PROCESS_START_ID, incidentAfterMigration.getActivityId()); assertEquals(targetProcessDefinition.getId(), incidentAfterMigration.getProcessDefinitionId()); // and it is possible to complete the process rule.getManagementService().executeJob(timerTriggerJob.getId()); testHelper.completeTask(EVENT_SUB_PROCESS_TASK_ID); testHelper.assertProcessEnded(processInstance.getId()); }
assertNotNull(incidentAfterMigration); assertEquals(incidentBeforeMigration.getId(), incidentAfterMigration.getId()); assertEquals(Incident.EXTERNAL_TASK_HANDLER_TYPE, incidentAfterMigration.getIncidentType()); assertEquals(externalTask.getId(), incidentAfterMigration.getConfiguration()); assertEquals("newExternalTask", incidentAfterMigration.getActivityId()); assertEquals(targetProcessDefinition.getId(), incidentAfterMigration.getProcessDefinitionId()); assertEquals(externalTask.getExecutionId(), incidentAfterMigration.getExecutionId());
@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()); }
.incidentId(incidentInCallingProcess.getId()) .singleResult(); Assert.assertEquals(newProcess.getId(), incidentAfterMigration.getProcessDefinitionId()); Assert.assertEquals("callingV2", incidentAfterMigration.getActivityId());
@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()); }
protected HistoricIncidentEventEntity loadIncidentEvent(Incident incident) { String incidentId = incident.getId(); HistoricIncidentEventEntity cachedEntity = findInCache(HistoricIncidentEventEntity.class, incidentId); if(cachedEntity != null) { return cachedEntity; } else { return newIncidentEventEntity(incident); } }
@Deployment public void testActivityIdProperty() { executeAvailableJobs(); Incident incident = runtimeService .createIncidentQuery() .singleResult(); assertNotNull(incident); assertNotNull(incident.getActivityId()); assertEquals("theStart", incident.getActivityId()); assertNull(incident.getProcessInstanceId()); assertNull(incident.getExecutionId()); }
@Deployment(resources = TEST_PROCESS_ONE_JOB) public void testSetProcessDefinitionVersionMigrateIncident() { // given a process instance ProcessInstance instance = runtimeService.startProcessInstanceByKey("oneJobProcess", Variables.createVariables().putValue("shouldFail", true)); // with a failed job executeAvailableJobs(); // and an incident Incident incident = runtimeService.createIncidentQuery().singleResult(); assertNotNull(incident); // and a second deployment of the process org.camunda.bpm.engine.repository.Deployment deployment = repositoryService .createDeployment() .addClasspathResource(TEST_PROCESS_ONE_JOB) .deploy(); ProcessDefinition newDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult(); assertNotNull(newDefinition); // when the process instance is migrated CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutorTxRequired(); commandExecutor.execute(new SetProcessDefinitionVersionCmd(instance.getId(), 2)); // then the the incident should also be migrated Incident migratedIncident = runtimeService.createIncidentQuery().singleResult(); assertNotNull(migratedIncident); assertEquals(newDefinition.getId(), migratedIncident.getProcessDefinitionId()); assertEquals(instance.getId(), migratedIncident.getProcessInstanceId()); assertEquals(instance.getId(), migratedIncident.getExecutionId()); repositoryService.deleteDeployment(deployment.getId(), true); }
@Deployment(resources={"org/camunda/bpm/engine/test/api/runtime/failingProcessCreateOneIncident.bpmn20.xml"}) public void testQueryByIncidentMessage() { 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() .incidentMessage(incident.getIncidentMessage()).list(); assertEquals(1, executionList.size()); }
@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()); }
@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()); }
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()); }
@Deployment public void testIncidentUpdateAfterCompaction() { String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); executeAvailableJobs(); Incident incident = runtimeService.createIncidentQuery().singleResult(); assertNotNull(incident); assertNotSame(processInstanceId, incident.getExecutionId()); runtimeService.correlateMessage("Message"); incident = runtimeService.createIncidentQuery().singleResult(); assertNotNull(incident); // incident updated with new execution id after execution tree is compacted assertEquals(processInstanceId, incident.getExecutionId()); }
@Deployment(resources = "org/camunda/bpm/engine/test/api/externaltask/oneExternalTaskProcess.bpmn20.xml") public void testSetRetriesToZero() { // given runtimeService.startProcessInstanceByKey("oneExternalTaskProcess"); List<LockedExternalTask> externalTasks = externalTaskService.fetchAndLock(5, WORKER_ID) .topic(TOPIC_NAME, LOCK_TIME) .execute(); LockedExternalTask lockedTask = externalTasks.get(0); // when externalTaskService.setRetries(lockedTask.getId(), 0); // then Incident incident = runtimeService.createIncidentQuery().singleResult(); assertNotNull(incident); assertEquals(lockedTask.getId(), incident.getConfiguration()); // and resetting the retries removes the incident again externalTaskService.setRetries(lockedTask.getId(), 5); assertEquals(0, runtimeService.createIncidentQuery().count()); }
/** * See https://app.camunda.com/jira/browse/CAM-9505 */ @Deployment(resources = TEST_PROCESS_ONE_JOB) public void testPreserveTimestampOnUpdatedIncident() { // given ProcessInstance instance = runtimeService.startProcessInstanceByKey("oneJobProcess", Variables.createVariables().putValue("shouldFail", true)); executeAvailableJobs(); Incident incident = runtimeService.createIncidentQuery().singleResult(); assertNotNull(incident); Date timestamp = incident.getIncidentTimestamp(); org.camunda.bpm.engine.repository.Deployment deployment = repositoryService .createDeployment() .addClasspathResource(TEST_PROCESS_ONE_JOB) .deploy(); ProcessDefinition newDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult(); assertNotNull(newDefinition); // when CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutorTxRequired(); commandExecutor.execute(new SetProcessDefinitionVersionCmd(instance.getId(), 2)); Incident migratedIncident = runtimeService.createIncidentQuery().singleResult(); // then assertEquals(timestamp, migratedIncident.getIncidentTimestamp()); // cleanup repositoryService.deleteDeployment(deployment.getId(), true); }
assertNotNull(incidentAfterMigration); assertEquals(incidentBeforeMigration.getId(), incidentAfterMigration.getId()); assertEquals(jobAfterMigration.getId(), incidentAfterMigration.getConfiguration()); assertEquals("timerCatch", incidentAfterMigration.getActivityId()); assertEquals(targetProcessDefinition.getId(), incidentAfterMigration.getProcessDefinitionId());
public IncidentContext(Incident incident) { this.processDefinitionId = incident.getProcessDefinitionId(); this.activityId = incident.getActivityId(); this.executionId = incident.getExecutionId(); this.configuration = incident.getConfiguration(); this.tenantId = incident.getTenantId(); this.jobDefinitionId = incident.getJobDefinitionId(); }