/** * numJobsToAcquire >= numJobsAcquired >= numJobsFailedToLock must hold */ protected AcquiredJobs buildAcquiredJobs(int numJobsToAcquire, int numJobsAcquired, int numJobsFailedToLock) { AcquiredJobs acquiredJobs = new AcquiredJobs(numJobsToAcquire); for (int i = 0; i < numJobsAcquired; i++) { acquiredJobs.addJobIdBatch(Arrays.asList(Integer.toString(i))); } for (int i = 0; i < numJobsFailedToLock; i++) { acquiredJobs.removeJobId(Integer.toString(i)); } 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; }
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 void testAcquiredJobs() { List<String> firstBatch = new ArrayList<String>(Arrays.asList("a", "b", "c")); List<String> secondBatch = new ArrayList<String>(Arrays.asList("d", "e", "f")); List<String> thirdBatch = new ArrayList<String>(Arrays.asList("g")); AcquiredJobs acquiredJobs = new AcquiredJobs(0); acquiredJobs.addJobIdBatch(firstBatch); acquiredJobs.addJobIdBatch(secondBatch); acquiredJobs.addJobIdBatch(thirdBatch); assertEquals(firstBatch, acquiredJobs.getJobIdBatches().get(0)); assertEquals(secondBatch, acquiredJobs.getJobIdBatches().get(1)); assertEquals(thirdBatch, acquiredJobs.getJobIdBatches().get(2)); acquiredJobs.removeJobId("a"); assertEquals(Arrays.asList("b", "c"), acquiredJobs.getJobIdBatches().get(0)); assertEquals(secondBatch, acquiredJobs.getJobIdBatches().get(1)); assertEquals(thirdBatch, acquiredJobs.getJobIdBatches().get(2)); assertEquals(3, acquiredJobs.getJobIdBatches().size()); acquiredJobs.removeJobId("g"); assertEquals(2, acquiredJobs.getJobIdBatches().size()); } }
protected AcquiredJobs acquireJobs( JobAcquisitionContext context, JobAcquisitionStrategy acquisitionStrategy, ProcessEngineImpl currentProcessEngine) { CommandExecutor commandExecutor = currentProcessEngine.getProcessEngineConfiguration() .getCommandExecutorTxRequired(); int numJobsToAcquire = acquisitionStrategy.getNumJobsToAcquire(currentProcessEngine.getName()); AcquiredJobs acquiredJobs = null; if (numJobsToAcquire > 0) { jobExecutor.logAcquisitionAttempt(currentProcessEngine); acquiredJobs = commandExecutor.execute(jobExecutor.getAcquireJobsCmd(numJobsToAcquire)); } else { acquiredJobs = new AcquiredJobs(numJobsToAcquire); } context.submitAcquiredJobs(currentProcessEngine.getName(), acquiredJobs); jobExecutor.logAcquiredJobs(currentProcessEngine, acquiredJobs.size()); jobExecutor.logAcquisitionFailureJobs(currentProcessEngine, acquiredJobs.getNumberOfJobsFailedToLock()); LOG.acquiredJobs(currentProcessEngine.getName(), acquiredJobs); return acquiredJobs; }
protected AcquiredJobs acquireJobs( JobAcquisitionContext context, JobAcquisitionStrategy acquisitionStrategy, ProcessEngineImpl currentProcessEngine) { CommandExecutor commandExecutor = currentProcessEngine.getProcessEngineConfiguration() .getCommandExecutorTxRequired(); int numJobsToAcquire = acquisitionStrategy.getNumJobsToAcquire(currentProcessEngine.getName()); AcquiredJobs acquiredJobs = null; if (numJobsToAcquire > 0) { jobExecutor.logAcquisitionAttempt(currentProcessEngine); acquiredJobs = commandExecutor.execute(jobExecutor.getAcquireJobsCmd(numJobsToAcquire)); } else { acquiredJobs = new AcquiredJobs(numJobsToAcquire); } context.submitAcquiredJobs(currentProcessEngine.getName(), acquiredJobs); jobExecutor.logAcquiredJobs(currentProcessEngine, acquiredJobs.size()); jobExecutor.logAcquisitionFailureJobs(currentProcessEngine, acquiredJobs.getNumberOfJobsFailedToLock()); LOG.acquiredJobs(currentProcessEngine.getName(), acquiredJobs); return acquiredJobs; }
/** * numJobsToAcquire >= numJobsAcquired >= numJobsFailedToLock must hold */ protected AcquiredJobs buildAcquiredJobs(int numJobsToAcquire, int numJobsAcquired, int numJobsFailedToLock) { AcquiredJobs acquiredJobs = new AcquiredJobs(numJobsToAcquire); for (int i = 0; i < numJobsAcquired; i++) { acquiredJobs.addJobIdBatch(Arrays.asList(Integer.toString(i))); } for (int i = 0; i < numJobsFailedToLock; i++) { acquiredJobs.removeJobId(Integer.toString(i)); } 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; }
public void testAcquiredJobs() { List<String> firstBatch = new ArrayList<String>(Arrays.asList("a", "b", "c")); List<String> secondBatch = new ArrayList<String>(Arrays.asList("d", "e", "f")); List<String> thirdBatch = new ArrayList<String>(Arrays.asList("g")); AcquiredJobs acquiredJobs = new AcquiredJobs(0); acquiredJobs.addJobIdBatch(firstBatch); acquiredJobs.addJobIdBatch(secondBatch); acquiredJobs.addJobIdBatch(thirdBatch); assertEquals(firstBatch, acquiredJobs.getJobIdBatches().get(0)); assertEquals(secondBatch, acquiredJobs.getJobIdBatches().get(1)); assertEquals(thirdBatch, acquiredJobs.getJobIdBatches().get(2)); acquiredJobs.removeJobId("a"); assertEquals(Arrays.asList("b", "c"), acquiredJobs.getJobIdBatches().get(0)); assertEquals(secondBatch, acquiredJobs.getJobIdBatches().get(1)); assertEquals(thirdBatch, acquiredJobs.getJobIdBatches().get(2)); assertEquals(3, acquiredJobs.getJobIdBatches().size()); acquiredJobs.removeJobId("g"); assertEquals(2, acquiredJobs.getJobIdBatches().size()); } }
protected AcquiredJobs acquireJobs( JobAcquisitionContext context, JobAcquisitionStrategy acquisitionStrategy, ProcessEngineImpl currentProcessEngine) { CommandExecutor commandExecutor = currentProcessEngine.getProcessEngineConfiguration() .getCommandExecutorTxRequired(); int numJobsToAcquire = acquisitionStrategy.getNumJobsToAcquire(currentProcessEngine.getName()); AcquiredJobs acquiredJobs = null; if (numJobsToAcquire > 0) { jobExecutor.logAcquisitionAttempt(currentProcessEngine); acquiredJobs = commandExecutor.execute(jobExecutor.getAcquireJobsCmd(numJobsToAcquire)); } else { acquiredJobs = new AcquiredJobs(numJobsToAcquire); } context.submitAcquiredJobs(currentProcessEngine.getName(), acquiredJobs); jobExecutor.logAcquiredJobs(currentProcessEngine, acquiredJobs.size()); jobExecutor.logAcquisitionFailureJobs(currentProcessEngine, acquiredJobs.getNumberOfJobsFailedToLock()); LOG.acquiredJobs(currentProcessEngine.getName(), acquiredJobs); return acquiredJobs; }