protected boolean areInSameProcessInstance(JobEntity job1, JobEntity job2) { if (job1 == null || job2 == null) { return false; } String instance1 = job1.getProcessInstanceId(); String instance2 = job2.getProcessInstanceId(); return instance1 != null && instance1.equals(instance2); }
protected boolean areInSameProcessInstance(JobEntity job1, JobEntity job2) { if (job1 == null || job2 == null) { return false; } String instance1 = job1.getProcessInstanceId(); String instance2 = job2.getProcessInstanceId(); return instance1 != null && instance1.equals(instance2); }
protected JobEntity createNonExclusiveJob(String id, String processInstanceId) { JobEntity job = mock(JobEntity.class); when(job.getId()).thenReturn(id); when(job.getProcessInstanceId()).thenReturn(processInstanceId); return job; }
public AcquiredJobs execute(CommandContext commandContext) { acquiredJobs = new AcquiredJobs(numJobsToAcquire); List<JobEntity> jobs = commandContext .getJobManager() .findNextJobsToExecute(new Page(0, numJobsToAcquire)); Map<String, List<String>> exclusiveJobsByProcessInstance = new HashMap<String, List<String>>(); for (JobEntity job : jobs) { lockJob(job); if(job.isExclusive()) { List<String> list = exclusiveJobsByProcessInstance.get(job.getProcessInstanceId()); if (list == null) { list = new ArrayList<String>(); exclusiveJobsByProcessInstance.put(job.getProcessInstanceId(), list); } list.add(job.getId()); } else { acquiredJobs.addJobIdBatch(job.getId()); } } for (List<String> jobIds : exclusiveJobsByProcessInstance.values()) { acquiredJobs.addJobIdBatch(jobIds); } // register an OptimisticLockingListener which is notified about jobs which cannot be acquired. // the listener removes them from the list of acquired jobs. commandContext .getDbEntityManager() .registerOptimisticLockingListener(this); return acquiredJobs; }
public AcquiredJobs execute(CommandContext commandContext) { acquiredJobs = new AcquiredJobs(numJobsToAcquire); List<JobEntity> jobs = commandContext .getJobManager() .findNextJobsToExecute(new Page(0, numJobsToAcquire)); Map<String, List<String>> exclusiveJobsByProcessInstance = new HashMap<String, List<String>>(); for (JobEntity job : jobs) { lockJob(job); if(job.isExclusive()) { List<String> list = exclusiveJobsByProcessInstance.get(job.getProcessInstanceId()); if (list == null) { list = new ArrayList<String>(); exclusiveJobsByProcessInstance.put(job.getProcessInstanceId(), list); } list.add(job.getId()); } else { acquiredJobs.addJobIdBatch(job.getId()); } } for (List<String> jobIds : exclusiveJobsByProcessInstance.values()) { acquiredJobs.addJobIdBatch(jobIds); } // register an OptimisticLockingListener which is notified about jobs which cannot be acquired. // the listener removes them from the list of acquired jobs. commandContext .getDbEntityManager() .registerOptimisticLockingListener(this); return acquiredJobs; }
@Override public void checkUpdateRetriesJob(JobEntity job) { if (job.getProcessDefinitionKey() == null) { // "standalone" job: nothing to do! return; } CompositePermissionCheck retryJobPermission = new PermissionCheckBuilder() .disjunctive() .atomicCheckForResourceId(PROCESS_INSTANCE, job.getProcessInstanceId(), ProcessInstancePermissions.RETRY_JOB) .atomicCheckForResourceId(PROCESS_DEFINITION, job.getProcessDefinitionKey(), ProcessDefinitionPermissions.RETRY_JOB) .atomicCheckForResourceId(PROCESS_INSTANCE, job.getProcessInstanceId(), UPDATE) .atomicCheckForResourceId(PROCESS_DEFINITION, job.getProcessDefinitionKey(), UPDATE_INSTANCE) .build(); getAuthorizationManager().checkAuthorization(retryJobPermission); }
@Override public void checkUpdateRetriesJob(JobEntity job) { if (job.getProcessDefinitionKey() == null) { // "standalone" job: nothing to do! return; } CompositePermissionCheck retryJobPermission = new PermissionCheckBuilder() .disjunctive() .atomicCheckForResourceId(PROCESS_INSTANCE, job.getProcessInstanceId(), ProcessInstancePermissions.RETRY_JOB) .atomicCheckForResourceId(PROCESS_DEFINITION, job.getProcessDefinitionKey(), ProcessDefinitionPermissions.RETRY_JOB) .atomicCheckForResourceId(PROCESS_INSTANCE, job.getProcessInstanceId(), UPDATE) .atomicCheckForResourceId(PROCESS_DEFINITION, job.getProcessDefinitionKey(), UPDATE_INSTANCE) .build(); getAuthorizationManager().checkAuthorization(retryJobPermission); }
protected void createOpLogEntry(CommandContext commandContext, long previousPriority, JobEntity job) { PropertyChange propertyChange = new PropertyChange(JOB_PRIORITY_PROPERTY, previousPriority, job.getPriority()); commandContext .getOperationLogManager() .logJobOperation( UserOperationLogEntry.OPERATION_TYPE_SET_PRIORITY, job.getId(), job.getJobDefinitionId(), job.getProcessInstanceId(), job.getProcessDefinitionId(), job.getProcessDefinitionKey(), propertyChange); } }
protected void createOpLogEntry(CommandContext commandContext, long previousPriority, JobEntity job) { PropertyChange propertyChange = new PropertyChange(JOB_PRIORITY_PROPERTY, previousPriority, job.getPriority()); commandContext .getOperationLogManager() .logJobOperation( UserOperationLogEntry.OPERATION_TYPE_SET_PRIORITY, job.getId(), job.getJobDefinitionId(), job.getProcessInstanceId(), job.getProcessDefinitionId(), job.getProcessDefinitionKey(), propertyChange); } }
@Test @Deployment(resources = { "org/camunda/bpm/engine/test/jobexecutor/jobPrioProcess.bpmn20.xml", "org/camunda/bpm/engine/test/jobexecutor/timerJobPrioProcess.bpmn20.xml" }) public void testAcquisitionByPriorityAndDueDate() { // job with priority 10 String instance1 = startProcess("jobPrioProcess", "task1"); // job with priority 5 incrementClock(1); String instance2 = startProcess("jobPrioProcess", "task2"); // job with priority 10 incrementClock(1); String instance3 = startProcess("jobPrioProcess", "task1"); // job with priority 5 incrementClock(1); String instance4 = startProcess("jobPrioProcess", "task2"); List<JobEntity> acquirableJobs = findAcquirableJobs(); assertEquals(4, acquirableJobs.size()); assertEquals(instance1, acquirableJobs.get(0).getProcessInstanceId()); assertEquals(instance3, acquirableJobs.get(1).getProcessInstanceId()); assertEquals(instance2, acquirableJobs.get(2).getProcessInstanceId()); assertEquals(instance4, acquirableJobs.get(3).getProcessInstanceId()); }
@Test @Deployment(resources = "org/camunda/bpm/engine/test/jobexecutor/jobPrioProcess.bpmn20.xml") public void testJobPriorityIsNotConsidered() { // prio 5 String instance1 = startProcess("jobPrioProcess", "task2"); // prio 10 incrementClock(1); String instance2 = startProcess("jobPrioProcess", "task1"); // prio 5 incrementClock(1); String instance3 = startProcess("jobPrioProcess", "task2"); // prio 10 incrementClock(1); String instance4 = startProcess("jobPrioProcess", "task1"); List<JobEntity> acquirableJobs = findAcquirableJobs(); assertEquals(4, acquirableJobs.size()); assertEquals(5, (int) acquirableJobs.get(0).getPriority()); assertEquals(instance1, acquirableJobs.get(0).getProcessInstanceId()); assertEquals(10, (int) acquirableJobs.get(1).getPriority()); assertEquals(instance2, acquirableJobs.get(1).getProcessInstanceId()); assertEquals(5, (int) acquirableJobs.get(2).getPriority()); assertEquals(instance3, acquirableJobs.get(2).getProcessInstanceId()); assertEquals(10, (int) acquirableJobs.get(3).getPriority()); assertEquals(instance4, acquirableJobs.get(3).getProcessInstanceId()); }
public UserOperationLogContextEntryBuilder inContextOf(JobEntity job) { entry.setJobDefinitionId(job.getJobDefinitionId()); entry.setProcessInstanceId(job.getProcessInstanceId()); entry.setProcessDefinitionId(job.getProcessDefinitionId()); entry.setProcessDefinitionKey(job.getProcessDefinitionKey()); entry.setDeploymentId(job.getDeploymentId()); ExecutionEntity execution = job.getExecution(); if (execution != null) { entry.setRootProcessInstanceId(execution.getRootProcessInstanceId()); } return this; }
public UserOperationLogContextEntryBuilder inContextOf(JobEntity job) { entry.setJobDefinitionId(job.getJobDefinitionId()); entry.setProcessInstanceId(job.getProcessInstanceId()); entry.setProcessDefinitionId(job.getProcessDefinitionId()); entry.setProcessDefinitionKey(job.getProcessDefinitionKey()); entry.setDeploymentId(job.getDeploymentId()); ExecutionEntity execution = job.getExecution(); if (execution != null) { entry.setRootProcessInstanceId(execution.getRootProcessInstanceId()); } return this; }
public void checkUpdateJob(JobEntity job) { if (job.getProcessDefinitionKey() == null) { // "standalone" job: nothing to do! return; } // necessary permissions: // - UPDATE on PROCESS_INSTANCE PermissionCheck firstCheck = getAuthorizationManager().newPermissionCheck(); firstCheck.setPermission(UPDATE); firstCheck.setResource(PROCESS_INSTANCE); firstCheck.setResourceId(job.getProcessInstanceId()); // ... OR ... // - UPDATE_INSTANCE on PROCESS_DEFINITION PermissionCheck secondCheck = getAuthorizationManager().newPermissionCheck(); secondCheck.setPermission(UPDATE_INSTANCE); secondCheck.setResource(PROCESS_DEFINITION); secondCheck.setResourceId(job.getProcessDefinitionKey()); secondCheck.setAuthorizationNotFoundReturnValue(0l); getAuthorizationManager().checkAuthorization(firstCheck, secondCheck); }
public void checkReadJob(JobEntity job) { if (job.getProcessDefinitionKey() == null) { // "standalone" job: nothing to do! return; } // necessary permissions: // - READ on PROCESS_INSTANCE PermissionCheck firstCheck = getAuthorizationManager().newPermissionCheck(); firstCheck.setPermission(READ); firstCheck.setResource(PROCESS_INSTANCE); firstCheck.setResourceId(job.getProcessInstanceId()); // ... OR ... // - READ_INSTANCE on PROCESS_DEFINITION PermissionCheck secondCheck = getAuthorizationManager().newPermissionCheck(); secondCheck.setPermission(READ_INSTANCE); secondCheck.setResource(PROCESS_DEFINITION); secondCheck.setResourceId(job.getProcessDefinitionKey()); secondCheck.setAuthorizationNotFoundReturnValue(0l); getAuthorizationManager().checkAuthorization(firstCheck, secondCheck); }
public void checkUpdateJob(JobEntity job) { if (job.getProcessDefinitionKey() == null) { // "standalone" job: nothing to do! return; } // necessary permissions: // - UPDATE on PROCESS_INSTANCE PermissionCheck firstCheck = getAuthorizationManager().newPermissionCheck(); firstCheck.setPermission(UPDATE); firstCheck.setResource(PROCESS_INSTANCE); firstCheck.setResourceId(job.getProcessInstanceId()); // ... OR ... // - UPDATE_INSTANCE on PROCESS_DEFINITION PermissionCheck secondCheck = getAuthorizationManager().newPermissionCheck(); secondCheck.setPermission(UPDATE_INSTANCE); secondCheck.setResource(PROCESS_DEFINITION); secondCheck.setResourceId(job.getProcessDefinitionKey()); secondCheck.setAuthorizationNotFoundReturnValue(0l); getAuthorizationManager().checkAuthorization(firstCheck, secondCheck); }
public void checkReadJob(JobEntity job) { if (job.getProcessDefinitionKey() == null) { // "standalone" job: nothing to do! return; } // necessary permissions: // - READ on PROCESS_INSTANCE PermissionCheck firstCheck = getAuthorizationManager().newPermissionCheck(); firstCheck.setPermission(READ); firstCheck.setResource(PROCESS_INSTANCE); firstCheck.setResourceId(job.getProcessInstanceId()); // ... OR ... // - READ_INSTANCE on PROCESS_DEFINITION PermissionCheck secondCheck = getAuthorizationManager().newPermissionCheck(); secondCheck.setPermission(READ_INSTANCE); secondCheck.setResource(PROCESS_DEFINITION); secondCheck.setResourceId(job.getProcessDefinitionKey()); secondCheck.setAuthorizationNotFoundReturnValue(0l); getAuthorizationManager().checkAuthorization(firstCheck, secondCheck); }
String processInstanceId = job.getProcessInstanceId(); if (processInstanceId != null) { checker.checkUpdateProcessInstanceById(processInstanceId);
protected void setJobRetriesByJobId(String jobId, int retries, CommandContext commandContext) { JobEntity job = commandContext .getJobManager() .findJobById(jobId); if (job != null) { for (CommandChecker checker : commandContext.getProcessEngineConfiguration().getCommandCheckers()) { checker.checkUpdateRetriesJob(job); } if (job.isInInconsistentLockState()) { job.resetLock(); } int oldRetries = job.getRetries(); job.setRetries(retries); PropertyChange propertyChange = new PropertyChange(RETRIES, oldRetries, job.getRetries()); commandContext.getOperationLogManager().logJobOperation(getLogEntryOperation(), job.getId(), job.getJobDefinitionId(), job.getProcessInstanceId(), job.getProcessDefinitionId(), job.getProcessDefinitionKey(), propertyChange); } else { throw new ProcessEngineException("No job found with id '" + jobId + "'."); } }
protected void setJobRetriesByJobId(String jobId, int retries, CommandContext commandContext) { JobEntity job = commandContext .getJobManager() .findJobById(jobId); if (job != null) { for (CommandChecker checker : commandContext.getProcessEngineConfiguration().getCommandCheckers()) { checker.checkUpdateRetriesJob(job); } if (job.isInInconsistentLockState()) { job.resetLock(); } int oldRetries = job.getRetries(); job.setRetries(retries); PropertyChange propertyChange = new PropertyChange(RETRIES, oldRetries, job.getRetries()); commandContext.getOperationLogManager().logJobOperation(getLogEntryOperation(), job.getId(), job.getJobDefinitionId(), job.getProcessInstanceId(), job.getProcessDefinitionId(), job.getProcessDefinitionKey(), propertyChange); } else { throw new ProcessEngineException("No job found with id '" + jobId + "'."); } }