StandaloneProcessEngineConfiguration engineConfiguration1 = new StandaloneInMemProcessEngineConfiguration();
engineConfiguration1.setProcessEngineName(getClass().getName() + "-engine1");
engineConfiguration1.setJdbcUrl("jdbc:h2:mem:activiti1");
engineConfiguration1.setJobExecutorActivate(false);
engineConfiguration1.setJobExecutor(jobExecutor);
ProcessEngine engine1 = engineConfiguration1.buildProcessEngine();
// and a second one
StandaloneProcessEngineConfiguration engineConfiguration2 = new StandaloneInMemProcessEngineConfiguration();
engineConfiguration2.setProcessEngineName(getClass().getName() + "engine2");
engineConfiguration2.setJdbcUrl("jdbc:h2:mem:activiti2");
engineConfiguration2.setJobExecutorActivate(false);
engineConfiguration1.setJobExecutor(jobExecutor);
ProcessEngine engine2 = engineConfiguration2.buildProcessEngine();
jobExecutor.registerProcessEngine((ProcessEngineImpl) engine1);
jobExecutor.registerProcessEngine((ProcessEngineImpl) engine2);
// stop the acquisition
jobExecutor.shutdown();
// deploy the processes
engine1.getRepositoryService().createDeployment()
.addClasspathResource(PROCESS_RESOURCE)
.deploy();
engine2.getRepositoryService().createDeployment()
.addClasspathResource(PROCESS_RESOURCE)
.deploy();
try {
// start one instance for each engine:
engine1.getRuntimeService().startProcessInstanceByKey("intermediateTimerEventExample");
engine2.getRuntimeService().startProcessInstanceByKey("intermediateTimerEventExample");
Calendar calendar = Calendar.getInstance();
calendar.add(Field.DAY_OF_YEAR.getCalendarField(), 6);
ClockUtil.setCurrentTime(calendar.getTime());
Assert.assertEquals(1, engine1.getManagementService().createJobQuery().count());
Assert.assertEquals(1, engine2.getManagementService().createJobQuery().count());
// assert task completed for the first engine
jobExecutor.start();
waitForJobExecutorToProcessAllJobs(10000, 100, jobExecutor, engine1.getManagementService(), false);
// assert task completed for the second engine
jobExecutor.start();
waitForJobExecutorToProcessAllJobs(10000, 100, jobExecutor, engine2.getManagementService(), false);
Thread.sleep(2000);
Assert.assertFalse(((SequentialJobAcquisitionRunnable) jobExecutor.getAcquireJobsRunnable()).isJobAdded());
Assert.assertEquals(0, engine1.getManagementService().createJobQuery().count());
Assert.assertEquals(0, engine2.getManagementService().createJobQuery().count());
}finally {
ClockUtil.reset();
engine1.close();
engine2.close();
}
}