public static JobDefinitionDto fromJobDefinition(JobDefinition definition) { JobDefinitionDto dto = new JobDefinitionDto(); dto.id = definition.getId(); dto.processDefinitionId = definition.getProcessDefinitionId(); dto.processDefinitionKey = definition.getProcessDefinitionKey(); dto.jobType = definition.getJobType(); dto.jobConfiguration = definition.getJobConfiguration(); dto.activityId = definition.getActivityId(); dto.suspended = definition.isSuspended(); dto.overridingJobPriority = definition.getOverridingJobPriority(); dto.tenantId = definition.getTenantId(); return dto; }
public JobDefinition getJobDefinitionForActivityIdAndType(String activityId, String jobHandlerType) { List<JobDefinition> collectedDefinitions = new ArrayList<JobDefinition>(); for (JobDefinition jobDefinition : getJobDefinitions()) { if (activityId.equals(jobDefinition.getActivityId()) && jobHandlerType.equals(jobDefinition.getJobType())) { collectedDefinitions.add(jobDefinition); } } if (collectedDefinitions.isEmpty()) { return null; } else if (collectedDefinitions.size() == 1) { return collectedDefinitions.get(0); } else { throw new RuntimeException("There is more than one job definition for activity " + activityId + " and job handler type " + jobHandlerType); } }
if(jobDeclaration.getActivityId().equals(jobDefinitionEntity.getActivityId()) && jobDeclaration.getJobHandlerType().equals(jobDefinitionEntity.getJobType())) { jobDeclaration.setJobDefinitionId(jobDefinitionEntity.getId()); jobDefinitionExists = true; break;
@Deployment public void testAsyncContinuation() { // given ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult(); JobDefinition jobDefinition = managementService.createJobDefinitionQuery().processDefinitionKey("testProcess").singleResult(); // then assert assertNotNull(jobDefinition); assertEquals(AsyncContinuationJobHandler.TYPE, jobDefinition.getJobType()); assertEquals("theService", jobDefinition.getActivityId()); assertEquals(MessageJobDeclaration.ASYNC_BEFORE, jobDefinition.getJobConfiguration()); assertEquals(processDefinition.getId(), jobDefinition.getProcessDefinitionId()); }
@Test public void createSeedJobByIds() { // when Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, null); // then there exists a seed job definition with the batch id as // configuration JobDefinition seedJobDefinition = helper.getSeedJobDefinition(batch); assertNotNull(seedJobDefinition); assertEquals(batch.getId(), seedJobDefinition.getJobConfiguration()); assertEquals(BatchSeedJobHandler.TYPE, seedJobDefinition.getJobType()); // and there exists a deletion job definition JobDefinition deletionJobDefinition = helper.getExecutionJobDefinition(batch); assertNotNull(deletionJobDefinition); assertEquals(Batch.TYPE_HISTORIC_DECISION_INSTANCE_DELETION, deletionJobDefinition.getJobType()); // and a seed job with no relation to a process or execution etc. Job seedJob = helper.getSeedJob(batch); assertNotNull(seedJob); assertEquals(seedJobDefinition.getId(), seedJob.getJobDefinitionId()); assertEquals(currentTime, seedJob.getDuedate()); assertNull(seedJob.getDeploymentId()); assertNull(seedJob.getProcessDefinitionId()); assertNull(seedJob.getProcessDefinitionKey()); assertNull(seedJob.getProcessInstanceId()); assertNull(seedJob.getExecutionId()); // but no deletion jobs where created List<Job> deletionJobs = helper.getExecutionJobs(batch); assertEquals(0, deletionJobs.size()); }
@Test public void testCreateBothJobDefinitionWithParseListenerAndAsyncBeforeInXml() { //given the asyncBefore is set in the xml String modelFileName = "jobAsyncBeforeCreationWithinParseListener.bpmn20.xml"; InputStream in = JobDefinitionCreationWithParseListenerTest.class.getResourceAsStream(modelFileName); DeploymentBuilder builder = engineRule.getRepositoryService().createDeployment().addInputStream(modelFileName, in); //when the asyncBefore and asyncAfter is set to true in the parse listener Deployment deployment = builder.deploy(); engineRule.manageDeployment(deployment); //then there exists two job definitions JobDefinitionQuery query = engineRule.getManagementService().createJobDefinitionQuery(); List<JobDefinition> definitions = query.orderByJobConfiguration().asc().list(); assertEquals(definitions.size(), 2); //asyncAfter JobDefinition asyncAfterAfter = definitions.get(0); assertEquals(asyncAfterAfter.getProcessDefinitionKey(), "oneTaskProcess"); assertEquals(asyncAfterAfter.getActivityId(), "servicetask1"); assertEquals(asyncAfterAfter.getJobConfiguration(), MessageJobDeclaration.ASYNC_AFTER); //asyncBefore JobDefinition asyncAfterBefore = definitions.get(1); assertEquals(asyncAfterBefore.getProcessDefinitionKey(), "oneTaskProcess"); assertEquals(asyncAfterBefore.getActivityId(), "servicetask1"); assertEquals(asyncAfterBefore.getJobConfiguration(), MessageJobDeclaration.ASYNC_BEFORE); }
@Test public void testClearOverridingJobPriorityWithAuthenticatedTenant() { JobDefinition jobDefinition = managementService.createJobDefinitionQuery().list().get(0); managementService.setOverridingJobPriorityForJobDefinition(jobDefinition.getId(), 1701); assertThat(managementService.createJobDefinitionQuery() .jobDefinitionId(jobDefinition.getId()).singleResult() .getOverridingJobPriority(), is(1701L)); identityService.setAuthentication("aUserId", null, Arrays.asList(TENANT_ONE)); managementService.clearOverridingJobPriorityForJobDefinition(jobDefinition.getId()); // then assertThat(managementService.createJobDefinitionQuery() .jobDefinitionId(jobDefinition.getId()).singleResult() .getOverridingJobPriority(), nullValue()); }
public void assertJobCreated(String activityId, String handlerType) { JobDefinition jobDefinitionAfter = snapshotAfterMigration.getJobDefinitionForActivityIdAndType(activityId, handlerType); assertNotNull("Expected that a job definition for activity '" + activityId + "' exists after migration", jobDefinitionAfter); Job jobAfter = snapshotAfterMigration.getJobForDefinitionId(jobDefinitionAfter.getId()); assertNotNull("Expected that a job for activity '" + activityId + "' exists after migration", jobAfter); assertTimerJob(jobAfter); assertEquals(jobDefinitionAfter.getProcessDefinitionId(), jobAfter.getProcessDefinitionId()); assertEquals(jobDefinitionAfter.getProcessDefinitionKey(), jobAfter.getProcessDefinitionKey()); for (Job job : snapshotBeforeMigration.getJobs()) { if (jobAfter.getId().equals(job.getId())) { fail("Expected job '" + jobAfter.getId() + "' to be created first after migration"); } } }
public void testSuspendByIdWithUpdatePermissionOnAnyProcessDefinition() { // given createGrantAuthorization(PROCESS_DEFINITION, ANY, userId, UPDATE); String jobDefinitionId = selectJobDefinitionByProcessDefinitionKey(TIMER_BOUNDARY_PROCESS_KEY).getId(); // when managementService.suspendJobDefinitionById(jobDefinitionId); // then JobDefinition jobDefinition = selectJobDefinitionByProcessDefinitionKey(TIMER_BOUNDARY_PROCESS_KEY); assertNotNull(jobDefinition); assertTrue(jobDefinition.isSuspended()); }
@Test public void testClearOverridingJobPriorityWithNoAuthenticatedTenant() { JobDefinition jobDefinition = managementService.createJobDefinitionQuery().list().get(0); managementService.setOverridingJobPriorityForJobDefinition(jobDefinition.getId(), 1701); identityService.setAuthentication("aUserId", null); // then thrown.expect(ProcessEngineException.class); thrown.expectMessage("Cannot update the process definition '" + jobDefinition.getProcessDefinitionId() +"' because it belongs to no authenticated tenant."); // when managementService.clearOverridingJobPriorityForJobDefinition(jobDefinition.getId()); }
@Test public void executionJobShouldGetPriorityFromOverridingJobDefinitionPriority() { // given Batch batch = helper.migrateProcessInstancesAsync(1); JobDefinition executionJobDefinition = helper.getExecutionJobDefinition(batch); managementService.setOverridingJobPriorityForJobDefinition(executionJobDefinition.getId(), CUSTOM_PRIORITY, true); // when helper.executeSeedJob(batch); // then Job executionJob = helper.getExecutionJobs(batch).get(0); assertEquals(CUSTOM_PRIORITY, executionJob.getPriority()); }
@Test public void testCreateJobDefinitionWithParseListener() { //given String modelFileName = "jobCreationWithinParseListener.bpmn20.xml"; InputStream in = JobDefinitionCreationWithParseListenerTest.class.getResourceAsStream(modelFileName); DeploymentBuilder builder = engineRule.getRepositoryService().createDeployment().addInputStream(modelFileName, in); //when the asyncBefore is set in the parse listener Deployment deployment = builder.deploy(); engineRule.manageDeployment(deployment); //then there exists a new job definition JobDefinitionQuery query = engineRule.getManagementService().createJobDefinitionQuery(); JobDefinition jobDef = query.singleResult(); assertNotNull(jobDef); assertEquals(jobDef.getProcessDefinitionKey(), "oneTaskProcess"); assertEquals(jobDef.getActivityId(), "servicetask1"); }
public void testSetJobRetriesByJobDefinitionIdWithoutAuthorization() { // given disableAuthorization(); JobDefinition jobDefinition = managementService.createJobDefinitionQuery().listPage(0, 1).get(0); enableAuthorization(); String jobDefinitionId = jobDefinition.getId(); try { // when managementService.setJobRetriesByJobDefinitionId(jobDefinitionId, 1); fail("Exception expected: It should not be possible to set job retries"); } catch (AuthorizationException e) { // then String message = e.getMessage(); assertTextPresent(userId, message); assertTextPresent(UPDATE.getName(), message); assertTextPresent(PROCESS_INSTANCE.resourceName(), message); assertTextPresent(UPDATE_INSTANCE.getName(), message); assertTextPresent(jobDefinition.getProcessDefinitionKey(), message); assertTextPresent(PROCESS_DEFINITION.resourceName(), message); assertTextPresent(ProcessInstancePermissions.RETRY_JOB.getName(), message); assertTextPresent(ProcessDefinitionPermissions.RETRY_JOB.getName(), message); } }
public void testSuspendByProcessDefinitionKeyWithUpdatePermissionOnProcessDefinition() { // given createGrantAuthorization(PROCESS_DEFINITION, TIMER_BOUNDARY_PROCESS_KEY, userId, UPDATE); // when managementService.suspendJobDefinitionByProcessDefinitionKey(TIMER_BOUNDARY_PROCESS_KEY); // then JobDefinition jobDefinition = selectJobDefinitionByProcessDefinitionKey(TIMER_BOUNDARY_PROCESS_KEY); assertNotNull(jobDefinition); assertTrue(jobDefinition.isSuspended()); }
protected void ensureActivityIdInitialized() { if (activityId == null) { JobDefinition jobDefinition = getJobDefinition(); if (jobDefinition != null) { activityId = jobDefinition.getActivityId(); } else { ExecutionEntity execution = getExecution(); if (execution != null) { activityId = execution.getActivityId(); } } } }
public void testQuerySortingAsc() { // exclude job definitions without tenant id because of database-specific ordering List<JobDefinition> jobDefinitions = managementService.createJobDefinitionQuery() .tenantIdIn(TENANT_ONE, TENANT_TWO) .orderByTenantId() .asc() .list(); assertThat(jobDefinitions.size(), is(2)); assertThat(jobDefinitions.get(0).getTenantId(), is(TENANT_ONE)); assertThat(jobDefinitions.get(1).getTenantId(), is(TENANT_TWO)); }
public boolean isAsyncAfter() { JobDefinition jobDefinition = jobEntity.getJobDefinition(); return MessageJobDeclaration.ASYNC_AFTER.equals(jobDefinition.getJobConfiguration()); }
@Deployment(resources = "org/camunda/bpm/engine/test/api/mgmt/jobPrioProcess.bpmn20.xml") public void testGetJobDefinitionDefaultPriority() { // with a process with job definitions deployed // then the definitions have a default null priority, meaning that they don't override the // value in the BPMN XML List<JobDefinition> jobDefinitions = managementService.createJobDefinitionQuery().list(); assertEquals(4, jobDefinitions.size()); assertNull(jobDefinitions.get(0).getOverridingJobPriority()); assertNull(jobDefinitions.get(1).getOverridingJobPriority()); assertNull(jobDefinitions.get(2).getOverridingJobPriority()); assertNull(jobDefinitions.get(3).getOverridingJobPriority()); }
@Deployment public void testTimerBoundaryEvent() { // given ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult(); JobDefinition jobDefinition = managementService.createJobDefinitionQuery().processDefinitionKey("testProcess").singleResult(); // then assert assertNotNull(jobDefinition); assertEquals(TimerExecuteNestedActivityJobHandler.TYPE, jobDefinition.getJobType()); assertEquals("theBoundaryEvent", jobDefinition.getActivityId()); assertEquals("DATE: 2036-11-14T11:12:22", jobDefinition.getJobConfiguration()); assertEquals(processDefinition.getId(), jobDefinition.getProcessDefinitionId()); }
@Test public void testSeedJobCreation() { ClockUtil.setCurrentTime(TEST_DATE); // when Batch batch = helper.migrateProcessInstancesAsync(10); // then there exists a seed job definition with the batch id as configuration JobDefinition seedJobDefinition = helper.getSeedJobDefinition(batch); assertNotNull(seedJobDefinition); assertEquals(batch.getId(), seedJobDefinition.getJobConfiguration()); assertEquals(BatchSeedJobHandler.TYPE, seedJobDefinition.getJobType()); // and there exists a migration job definition JobDefinition migrationJobDefinition = helper.getExecutionJobDefinition(batch); assertNotNull(migrationJobDefinition); assertEquals(Batch.TYPE_PROCESS_INSTANCE_MIGRATION, migrationJobDefinition.getJobType()); // and a seed job with no relation to a process or execution etc. Job seedJob = helper.getSeedJob(batch); assertNotNull(seedJob); assertEquals(seedJobDefinition.getId(), seedJob.getJobDefinitionId()); assertEquals(currentTime, seedJob.getDuedate()); assertNull(seedJob.getDeploymentId()); assertNull(seedJob.getProcessDefinitionId()); assertNull(seedJob.getProcessDefinitionKey()); assertNull(seedJob.getProcessInstanceId()); assertNull(seedJob.getExecutionId()); // but no migration jobs where created List<Job> migrationJobs = helper.getExecutionJobs(batch); assertEquals(0, migrationJobs.size()); }