public boolean isExecutingExclusiveJob() { return currentJob == null ? false : currentJob.isExclusive(); }
public boolean isExecutingExclusiveJob() { return currentJob == null ? false : currentJob.isExclusive(); }
protected JobEntity createExclusiveJob(String id, String processInstanceId) { JobEntity job = createNonExclusiveJob(id, processInstanceId); when(job.isExclusive()).thenReturn(true); 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; }
protected void hintJobExecutor(JobEntity job) { JobExecutor jobExecutor = Context.getProcessEngineConfiguration().getJobExecutor(); if (!jobExecutor.isActive()) { return; } JobExecutorContext jobExecutorContext = Context.getJobExecutorContext(); TransactionListener transactionListener = null; if(!job.isSuspended() && job.isExclusive() && jobExecutorContext != null && jobExecutorContext.isExecutingExclusiveJob() && areInSameProcessInstance(job, jobExecutorContext.getCurrentJob())) { // lock job & add to the queue of the current processor Date currentTime = ClockUtil.getCurrentTime(); job.setLockExpirationTime(new Date(currentTime.getTime() + jobExecutor.getLockTimeInMillis())); job.setLockOwner(jobExecutor.getLockOwner()); transactionListener = new ExclusiveJobAddedNotification(job.getId(), jobExecutorContext); } else { // notify job executor: transactionListener = new MessageAddedNotification(jobExecutor); } Context.getCommandContext() .getTransactionContext() .addTransactionListener(TransactionState.COMMITTED, transactionListener); }
protected void hintJobExecutor(JobEntity job) { JobExecutor jobExecutor = Context.getProcessEngineConfiguration().getJobExecutor(); if (!jobExecutor.isActive()) { return; } JobExecutorContext jobExecutorContext = Context.getJobExecutorContext(); TransactionListener transactionListener = null; if(!job.isSuspended() && job.isExclusive() && jobExecutorContext != null && jobExecutorContext.isExecutingExclusiveJob() && areInSameProcessInstance(job, jobExecutorContext.getCurrentJob())) { // lock job & add to the queue of the current processor Date currentTime = ClockUtil.getCurrentTime(); job.setLockExpirationTime(new Date(currentTime.getTime() + jobExecutor.getLockTimeInMillis())); job.setLockOwner(jobExecutor.getLockOwner()); transactionListener = new ExclusiveJobAddedNotification(job.getId(), jobExecutorContext); } else { // notify job executor: transactionListener = new MessageAddedNotification(jobExecutor); } Context.getCommandContext() .getTransactionContext() .addTransactionListener(TransactionState.COMMITTED, transactionListener); }
@Deployment public void testNonExclusiveService() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 non-exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertFalse(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); }
@Deployment public void testNonExclusiveStartEvent() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 non-exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertFalse(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); }
@Deployment public void testExclusiveService() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertTrue(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); }
@Deployment public void testNonExclusiveCatchEvent() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 non-exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertFalse(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); }
@Deployment public void testExclusiveThrowEvent() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertTrue(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); }
@Deployment public void testNonExclusiveEndEvent() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 non-exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertFalse(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); }
@Deployment public void testExclusiveCatchEvent() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertTrue(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); }
@Deployment public void testNonExclusiveThrowEvent() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 non-exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertFalse(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); }
@Deployment public void testExclusiveEndEvent() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertTrue(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); } }
@Deployment public void testExclusiveStartEvent() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertTrue(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); } }
@Deployment public void testExclusiveCatchEvent() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertTrue(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); }
@Deployment public void testExclusiveThrowEvent() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertTrue(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); }
@Deployment public void testNonExclusiveCatchEvent() { // start process runtimeService.startProcessInstanceByKey("exclusive"); // now there should be 1 non-exclusive job in the database: Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); assertFalse(((JobEntity)job).isExclusive()); waitForJobExecutorToProcessAllJobs(6000L); // all the jobs are done assertEquals(0, managementService.createJobQuery().count()); }