@Override public Job getJob(String processInstanceId) { return managementService.createJobQuery().processInstanceId(processInstanceId).singleResult(); }
@Override public Job getJob(String processInstanceId) { return managementService.createJobQuery().processInstanceId(processInstanceId).singleResult(); }
@Override public List<Job> getJobsWithExceptionByProcessInstanceId(String processInstanceId) { return activitiManagementService.createJobQuery().withException().processInstanceId(processInstanceId).list(); }
@Override public long getJobsWithExceptionCountByProcessInstanceId(String processInstanceId) { return activitiManagementService.createJobQuery().withException().processInstanceId(processInstanceId).count(); }
@Override public List<Job> getJobsWithExceptionByProcessInstanceId(String processInstanceId) { return activitiManagementService.createJobQuery().withException().processInstanceId(processInstanceId).list(); }
@Override public long getJobsWithExceptionCountByProcessInstanceId(String processInstanceId) { return activitiManagementService.createJobQuery().withException().processInstanceId(processInstanceId).count(); }
public Job getJob(String processInstanceId) { JobQuery query = engine.getManagementService().createJobQuery().processInstanceId(processInstanceId); return query.singleResult(); }
Job getJob(DelegateExecution context) { JobQuery jobQuery = context.getEngineServices().getManagementService().createJobQuery(); if (jobQuery == null) { return null; } return jobQuery.processInstanceId(context.getProcessInstanceId()).singleResult(); } }
@Test public void testGetJobsWithExceptionByProcessInstanceId() { String processInstanceId = "processInstanceId"; JobQuery jobQuery = mock(JobQuery.class); when(activitiManagementService.createJobQuery()).thenReturn(jobQuery); when(jobQuery.withException()).thenReturn(jobQuery); when(jobQuery.processInstanceId(processInstanceId)).thenReturn(jobQuery); List<Job> expectedJobs = new ArrayList<>(); when(jobQuery.list()).thenReturn(expectedJobs); List<Job> actualJobs = activitiService.getJobsWithExceptionByProcessInstanceId(processInstanceId); assertSame(expectedJobs, actualJobs); InOrder inOrder = inOrder(jobQuery); inOrder.verify(jobQuery).withException(); inOrder.verify(jobQuery).processInstanceId(processInstanceId); inOrder.verify(jobQuery).list(); inOrder.verifyNoMoreInteractions(); }
@Test public void testGetJobsWithExceptionCountByProcessInstanceId() { String processInstanceId = "processInstanceId"; JobQuery jobQuery = mock(JobQuery.class); when(activitiManagementService.createJobQuery()).thenReturn(jobQuery); when(jobQuery.withException()).thenReturn(jobQuery); when(jobQuery.processInstanceId(processInstanceId)).thenReturn(jobQuery); long expectedResult = 1234l; when(jobQuery.count()).thenReturn(expectedResult); long actualResult = activitiService.getJobsWithExceptionCountByProcessInstanceId(processInstanceId); assertEquals(expectedResult, actualResult); InOrder inOrder = inOrder(jobQuery); inOrder.verify(jobQuery).withException(); inOrder.verify(jobQuery).processInstanceId(processInstanceId); inOrder.verify(jobQuery).count(); inOrder.verifyNoMoreInteractions(); }
@Override protected Object doExecute() throws Exception { if (businessKey == null || businessKey.isEmpty()) { out.println("Please supply a business key"); } else { // reverse the list to start the sub-processes first (they have bigger id's) List<ProcessInstance> processInstanceList = processEngine.getRuntimeService() .createProcessInstanceQuery().variableValueEquals(CoreProcessVariables.POOL_BUSINESS_KEY, businessKey) .orderByProcessInstanceId().desc().list(); out.printf("Found %d processes with pool business key %s\n", processInstanceList.size(), businessKey); int count = 0; for (ProcessInstance instance : processInstanceList) { List<Job> jobs = processEngine.getManagementService().createJobQuery() .processInstanceId(instance.getProcessInstanceId()).withException().list(); for (Job job : jobs) { count++; processEngine.getManagementService().setJobRetries(job.getId(), JobEntity.DEFAULT_RETRIES); } } out.printf("Number of retries reset for %s jobs\n", count); } return null; }
private void waitForTimersToBeExecuted(String workflowInstanceId) throws Exception { String processInstanceId = BPMEngineRegistry.getLocalId(workflowInstanceId); // Job-executor should finish the job, no timers should be available for WF List<Job> timers = null; int numberOfRetries = 5; for (int i=0; i< numberOfRetries; i++) { Thread.sleep(1500); timers = activitiProcessEngine.getManagementService().createJobQuery() .timers() .processInstanceId(processInstanceId) .list(); if (timers.size() == 0) { break; } } if(timers.size() > 0) { fail("There are still timers available for the process: " + processInstanceId); } }
.processInstanceId(processInstanceId) .timers() .list();
.processInstanceId(processInstanceId) .timers() .list();
/** * This method tests the scenario when an error that is not workflow related is throws while workflow is executing an Async type task like Timer. This error * is logged as ERROR. */ @Test(expected = ActivitiException.class) public void testActivitiReportableError() throws Exception { BpmnModel bpmnModel = getBpmnModelForXmlResource(ACTIVITI_XML_HERD_TIMER_WITH_CLASSPATH); ServiceTask serviceTask = (ServiceTask) bpmnModel.getProcesses().get(0).getFlowElement("servicetask1"); FieldExtension exceptionField = new FieldExtension(); exceptionField.setFieldName("exceptionToThrow"); exceptionField.setExpression("${exceptionToThrow}"); serviceTask.getFieldExtensions().add(exceptionField); jobDefinitionServiceTestHelper.createJobDefinitionForActivitiXml(getActivitiXmlFromBpmnModel(bpmnModel)); List<Parameter> parameters = new ArrayList<>(); Parameter parameter = new Parameter("exceptionToThrow", MockJavaDelegate.EXCEPTION_BPMN_ERROR); parameters.add(parameter); Job job = jobService.createAndStartJob(jobServiceTestHelper.createJobCreateRequest(TEST_ACTIVITI_NAMESPACE_CD, TEST_ACTIVITI_JOB_NAME, parameters)); org.activiti.engine.runtime.Job timer = activitiManagementService.createJobQuery().processInstanceId(job.getId()).timers().singleResult(); if (timer != null) { executeWithoutLogging(Arrays.asList(ActivitiRuntimeHelper.class, TimerExecuteNestedActivityJobHandler.class), () -> { activitiManagementService.executeJob(timer.getId()); }); } }
Job timerJob = managementService.createJobQuery().timers().processInstanceId(processInstance.getId()).singleResult(); String globalJobId = BPMEngineRegistry.createGlobalId(ActivitiConstants.ENGINE_ID, timerJob.getId());
@Test public void testGetJobIntermediateTimer() throws Exception { jobDefinitionServiceTestHelper.createJobDefinition(ACTIVITI_XML_HERD_INTERMEDIATE_TIMER_WITH_CLASSPATH); Job job = jobService.createAndStartJob(jobServiceTestHelper.createJobCreateRequest(TEST_ACTIVITI_NAMESPACE_CD, TEST_ACTIVITI_JOB_NAME)); String activitiXml = IOUtils.toString(resourceLoader.getResource(ACTIVITI_XML_HERD_INTERMEDIATE_TIMER_WITH_CLASSPATH).getInputStream()); // Job should be waiting at User task. // Get job status Job jobGet = jobService.getJob(job.getId(), true); assertEquals(JobStatusEnum.RUNNING, jobGet.getStatus()); assertNotNull(jobGet.getActivitiJobXml()); assertEquals(activitiXml, jobGet.getActivitiJobXml()); assertTrue(jobGet.getCompletedWorkflowSteps().size() > 0); // Current workflow step will be null assertNull(jobGet.getCurrentWorkflowStep()); org.activiti.engine.runtime.Job timer = activitiManagementService.createJobQuery().processInstanceId(job.getId()).timers().singleResult(); if (timer != null) { activitiManagementService.executeJob(timer.getId()); } // Get the job status again. job should have completed now. jobGet = jobService.getJob(job.getId(), false); assertEquals(JobStatusEnum.COMPLETED, jobGet.getStatus()); assertNull(jobGet.getCurrentWorkflowStep()); }
/** * This method tests the timer execution in a workflow. */ @Test public void testTimerJob() throws Exception { // Create and start the workflow. jobDefinitionServiceTestHelper.createJobDefinition(ACTIVITI_XML_HERD_TIMER_WITH_CLASSPATH); Job job = jobService.createAndStartJob(jobServiceTestHelper.createJobCreateRequest(TEST_ACTIVITI_NAMESPACE_CD, TEST_ACTIVITI_JOB_NAME)); assertNotNull(job); // This workflow would normally automatically start a timer which would eventually complete the workflow, however, since // this test method is running within our own transaction, the timer would never go off since it is run in a different thread which is outside of // our transaction which didn't commit yet. As a result, we need to manually run the timer job to simulate what would happen if the timer // went off by itself. org.activiti.engine.runtime.Job timer = activitiManagementService.createJobQuery().processInstanceId(job.getId()).timers().singleResult(); if (timer != null) { activitiManagementService.executeJob(timer.getId()); } }
/** * This method tests the scenario when an workflow related error is throws while workflow is executing an Async type task like Timer. This error is logged * as WARN. */ @Test(expected = ActivitiException.class) public void testActivitiUnReportableError() throws Exception { BpmnModel bpmnModel = getBpmnModelForXmlResource(ACTIVITI_XML_HERD_TIMER_WITH_CLASSPATH); ServiceTask serviceTask = (ServiceTask) bpmnModel.getProcesses().get(0).getFlowElement("servicetask1"); serviceTask.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION); serviceTask.setImplementation("${BeanNotAvailable}"); jobDefinitionServiceTestHelper.createJobDefinitionForActivitiXml(getActivitiXmlFromBpmnModel(bpmnModel)); Job job = jobService.createAndStartJob(jobServiceTestHelper.createJobCreateRequest(TEST_ACTIVITI_NAMESPACE_CD, TEST_ACTIVITI_JOB_NAME, null)); org.activiti.engine.runtime.Job timer = activitiManagementService.createJobQuery().processInstanceId(job.getId()).timers().singleResult(); if (timer != null) { executeWithoutLogging(TimerExecuteNestedActivityJobHandler.class, () -> { activitiManagementService.executeJob(timer.getId()); }); } }
.processInstanceId(processInstanceId).singleResult(); timer = (TimerEntity) activitiProcessEngine.getManagementService() .createJobQuery().timers() .processInstanceId(processInstanceId).singleResult();