|
|
|
|
@@ -16,42 +16,29 @@
|
|
|
|
|
|
|
|
|
|
package org.springframework.scheduling.quartz;
|
|
|
|
|
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
import javax.sql.DataSource;
|
|
|
|
|
|
|
|
|
|
import org.junit.Ignore;
|
|
|
|
|
import org.junit.Test;
|
|
|
|
|
import org.quartz.CronTrigger;
|
|
|
|
|
import org.quartz.Job;
|
|
|
|
|
import org.quartz.JobDetail;
|
|
|
|
|
import org.quartz.JobExecutionContext;
|
|
|
|
|
import org.quartz.JobExecutionException;
|
|
|
|
|
import org.quartz.JobListener;
|
|
|
|
|
import org.quartz.ObjectAlreadyExistsException;
|
|
|
|
|
import org.quartz.Scheduler;
|
|
|
|
|
import org.quartz.SchedulerContext;
|
|
|
|
|
import org.quartz.SchedulerException;
|
|
|
|
|
import org.quartz.SchedulerFactory;
|
|
|
|
|
import org.quartz.SchedulerListener;
|
|
|
|
|
import org.quartz.SimpleTrigger;
|
|
|
|
|
import org.quartz.Trigger;
|
|
|
|
|
import org.quartz.TriggerListener;
|
|
|
|
|
import org.quartz.impl.JobDetailImpl;
|
|
|
|
|
import org.quartz.impl.SchedulerRepository;
|
|
|
|
|
import org.quartz.spi.JobFactory;
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.config.BeanDefinition;
|
|
|
|
|
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
|
|
|
|
import org.springframework.beans.factory.support.RootBeanDefinition;
|
|
|
|
|
import org.springframework.beans.factory.support.StaticListableBeanFactory;
|
|
|
|
|
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
|
|
|
|
import org.springframework.context.support.StaticApplicationContext;
|
|
|
|
|
import org.springframework.core.task.TaskExecutor;
|
|
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
|
|
import org.springframework.tests.Assume;
|
|
|
|
|
import org.springframework.tests.TestGroup;
|
|
|
|
|
import org.springframework.tests.context.TestMethodInvokingTask;
|
|
|
|
|
import org.springframework.tests.sample.beans.TestBean;
|
|
|
|
|
|
|
|
|
|
import static org.junit.Assert.*;
|
|
|
|
|
@@ -68,473 +55,6 @@ import static org.mockito.BDDMockito.*;
|
|
|
|
|
*/
|
|
|
|
|
public class QuartzSupportTests {
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testSchedulerFactoryBean() throws Exception {
|
|
|
|
|
doTestSchedulerFactoryBean(false, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testSchedulerFactoryBeanWithExplicitJobDetail() throws Exception {
|
|
|
|
|
doTestSchedulerFactoryBean(true, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testSchedulerFactoryBeanWithPrototypeJob() throws Exception {
|
|
|
|
|
doTestSchedulerFactoryBean(false, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void doTestSchedulerFactoryBean(boolean explicitJobDetail, boolean prototypeJob) throws Exception {
|
|
|
|
|
TestBean tb = new TestBean("tb", 99);
|
|
|
|
|
JobDetailBean jobDetail0 = new JobDetailBean();
|
|
|
|
|
jobDetail0.setJobClass(Job.class);
|
|
|
|
|
jobDetail0.setBeanName("myJob0");
|
|
|
|
|
Map<String, Object> jobData = new HashMap<String, Object>();
|
|
|
|
|
jobData.put("testBean", tb);
|
|
|
|
|
jobDetail0.setJobDataAsMap(jobData);
|
|
|
|
|
jobDetail0.afterPropertiesSet();
|
|
|
|
|
assertEquals(tb, jobDetail0.getJobDataMap().get("testBean"));
|
|
|
|
|
|
|
|
|
|
CronTriggerBean trigger0 = new CronTriggerBean();
|
|
|
|
|
trigger0.setBeanName("myTrigger0");
|
|
|
|
|
trigger0.setJobDetail(jobDetail0);
|
|
|
|
|
trigger0.setCronExpression("0/1 * * * * ?");
|
|
|
|
|
trigger0.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
TestMethodInvokingTask task1 = new TestMethodInvokingTask();
|
|
|
|
|
MethodInvokingJobDetailFactoryBean mijdfb = new MethodInvokingJobDetailFactoryBean();
|
|
|
|
|
mijdfb.setBeanName("myJob1");
|
|
|
|
|
if (prototypeJob) {
|
|
|
|
|
StaticListableBeanFactory beanFactory = new StaticListableBeanFactory();
|
|
|
|
|
beanFactory.addBean("task", task1);
|
|
|
|
|
mijdfb.setTargetBeanName("task");
|
|
|
|
|
mijdfb.setBeanFactory(beanFactory);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
mijdfb.setTargetObject(task1);
|
|
|
|
|
}
|
|
|
|
|
mijdfb.setTargetMethod("doSomething");
|
|
|
|
|
mijdfb.afterPropertiesSet();
|
|
|
|
|
JobDetail jobDetail1 = mijdfb.getObject();
|
|
|
|
|
|
|
|
|
|
SimpleTriggerBean trigger1 = new SimpleTriggerBean();
|
|
|
|
|
trigger1.setBeanName("myTrigger1");
|
|
|
|
|
trigger1.setJobDetail(jobDetail1);
|
|
|
|
|
trigger1.setStartDelay(0);
|
|
|
|
|
trigger1.setRepeatInterval(20);
|
|
|
|
|
trigger1.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
final Scheduler scheduler = mock(Scheduler.class);
|
|
|
|
|
given(scheduler.getContext()).willReturn(new SchedulerContext());
|
|
|
|
|
given(scheduler.scheduleJob(trigger0)).willReturn(new Date());
|
|
|
|
|
given(scheduler.scheduleJob(trigger1)).willReturn(new Date());
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean() {
|
|
|
|
|
@Override
|
|
|
|
|
protected Scheduler createScheduler(SchedulerFactory schedulerFactory, String schedulerName) {
|
|
|
|
|
return scheduler;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
schedulerFactoryBean.setJobFactory(null);
|
|
|
|
|
Map<String, Object> schedulerContext = new HashMap<String, Object>();
|
|
|
|
|
schedulerContext.put("otherTestBean", tb);
|
|
|
|
|
schedulerFactoryBean.setSchedulerContextAsMap(schedulerContext);
|
|
|
|
|
if (explicitJobDetail) {
|
|
|
|
|
schedulerFactoryBean.setJobDetails(new JobDetail[] {jobDetail0});
|
|
|
|
|
}
|
|
|
|
|
schedulerFactoryBean.setTriggers(new Trigger[] {trigger0, trigger1});
|
|
|
|
|
try {
|
|
|
|
|
schedulerFactoryBean.afterPropertiesSet();
|
|
|
|
|
schedulerFactoryBean.start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
schedulerFactoryBean.destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
verify(scheduler).getJobDetail("myJob0", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
verify(scheduler).getJobDetail("myJob1", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
verify(scheduler).getTrigger("myTrigger0", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
verify(scheduler).getTrigger("myTrigger1", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
verify(scheduler).addJob(jobDetail0, true);
|
|
|
|
|
verify(scheduler).addJob(jobDetail1, true);
|
|
|
|
|
verify(scheduler).start();
|
|
|
|
|
verify(scheduler).shutdown(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testSchedulerFactoryBeanWithExistingJobs() throws Exception {
|
|
|
|
|
doTestSchedulerFactoryBeanWithExistingJobs(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testSchedulerFactoryBeanWithOverwriteExistingJobs() throws Exception {
|
|
|
|
|
doTestSchedulerFactoryBeanWithExistingJobs(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void doTestSchedulerFactoryBeanWithExistingJobs(boolean overwrite) throws Exception {
|
|
|
|
|
TestBean tb = new TestBean("tb", 99);
|
|
|
|
|
JobDetailBean jobDetail0 = new JobDetailBean();
|
|
|
|
|
jobDetail0.setJobClass(Job.class);
|
|
|
|
|
jobDetail0.setBeanName("myJob0");
|
|
|
|
|
Map<String, Object> jobData = new HashMap<String, Object>();
|
|
|
|
|
jobData.put("testBean", tb);
|
|
|
|
|
jobDetail0.setJobDataAsMap(jobData);
|
|
|
|
|
jobDetail0.afterPropertiesSet();
|
|
|
|
|
assertEquals(tb, jobDetail0.getJobDataMap().get("testBean"));
|
|
|
|
|
|
|
|
|
|
CronTriggerBean trigger0 = new CronTriggerBean();
|
|
|
|
|
trigger0.setBeanName("myTrigger0");
|
|
|
|
|
trigger0.setJobDetail(jobDetail0);
|
|
|
|
|
trigger0.setCronExpression("0/1 * * * * ?");
|
|
|
|
|
trigger0.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
TestMethodInvokingTask task1 = new TestMethodInvokingTask();
|
|
|
|
|
MethodInvokingJobDetailFactoryBean mijdfb = new MethodInvokingJobDetailFactoryBean();
|
|
|
|
|
mijdfb.setBeanName("myJob1");
|
|
|
|
|
mijdfb.setTargetObject(task1);
|
|
|
|
|
mijdfb.setTargetMethod("doSomething");
|
|
|
|
|
mijdfb.afterPropertiesSet();
|
|
|
|
|
JobDetail jobDetail1 = mijdfb.getObject();
|
|
|
|
|
|
|
|
|
|
SimpleTriggerBean trigger1 = new SimpleTriggerBean();
|
|
|
|
|
trigger1.setBeanName("myTrigger1");
|
|
|
|
|
trigger1.setJobDetail(jobDetail1);
|
|
|
|
|
trigger1.setStartDelay(0);
|
|
|
|
|
trigger1.setRepeatInterval(20);
|
|
|
|
|
trigger1.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
final Scheduler scheduler = mock(Scheduler.class);
|
|
|
|
|
given(scheduler.getContext()).willReturn(new SchedulerContext());
|
|
|
|
|
given(scheduler.rescheduleJob("myTrigger1", Scheduler.DEFAULT_GROUP, trigger1)).willReturn(new Date());
|
|
|
|
|
given(scheduler.getTrigger("myTrigger1", Scheduler.DEFAULT_GROUP)).willReturn(new SimpleTrigger());
|
|
|
|
|
given(scheduler.scheduleJob(trigger0)).willReturn(new Date());
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean() {
|
|
|
|
|
@Override
|
|
|
|
|
protected Scheduler createScheduler(SchedulerFactory schedulerFactory, String schedulerName) {
|
|
|
|
|
return scheduler;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
schedulerFactoryBean.setJobFactory(null);
|
|
|
|
|
Map<String, Object> schedulerContext = new HashMap<String, Object>();
|
|
|
|
|
schedulerContext.put("otherTestBean", tb);
|
|
|
|
|
schedulerFactoryBean.setSchedulerContextAsMap(schedulerContext);
|
|
|
|
|
schedulerFactoryBean.setTriggers(new Trigger[] {trigger0, trigger1});
|
|
|
|
|
if (overwrite) {
|
|
|
|
|
schedulerFactoryBean.setOverwriteExistingJobs(true);
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
schedulerFactoryBean.afterPropertiesSet();
|
|
|
|
|
schedulerFactoryBean.start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
schedulerFactoryBean.destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
verify(scheduler).getTrigger("myTrigger0", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
verify(scheduler).getTrigger("myTrigger1", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
if (overwrite) {
|
|
|
|
|
verify(scheduler).addJob(jobDetail1, true);
|
|
|
|
|
verify(scheduler).rescheduleJob("myTrigger1", Scheduler.DEFAULT_GROUP, trigger1);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
verify(scheduler).getJobDetail("myJob0", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
}
|
|
|
|
|
verify(scheduler).addJob(jobDetail0, true);
|
|
|
|
|
verify(scheduler).start();
|
|
|
|
|
verify(scheduler).shutdown(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testSchedulerFactoryBeanWithExistingJobsAndRaceCondition() throws Exception {
|
|
|
|
|
doTestSchedulerFactoryBeanWithExistingJobsAndRaceCondition(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testSchedulerFactoryBeanWithOverwriteExistingJobsAndRaceCondition() throws Exception {
|
|
|
|
|
doTestSchedulerFactoryBeanWithExistingJobsAndRaceCondition(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void doTestSchedulerFactoryBeanWithExistingJobsAndRaceCondition(boolean overwrite) throws Exception {
|
|
|
|
|
TestBean tb = new TestBean("tb", 99);
|
|
|
|
|
JobDetailBean jobDetail0 = new JobDetailBean();
|
|
|
|
|
jobDetail0.setJobClass(Job.class);
|
|
|
|
|
jobDetail0.setBeanName("myJob0");
|
|
|
|
|
Map<String, Object> jobData = new HashMap<String, Object>();
|
|
|
|
|
jobData.put("testBean", tb);
|
|
|
|
|
jobDetail0.setJobDataAsMap(jobData);
|
|
|
|
|
jobDetail0.afterPropertiesSet();
|
|
|
|
|
assertEquals(tb, jobDetail0.getJobDataMap().get("testBean"));
|
|
|
|
|
|
|
|
|
|
CronTriggerBean trigger0 = new CronTriggerBean();
|
|
|
|
|
trigger0.setBeanName("myTrigger0");
|
|
|
|
|
trigger0.setJobDetail(jobDetail0);
|
|
|
|
|
trigger0.setCronExpression("0/1 * * * * ?");
|
|
|
|
|
trigger0.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
TestMethodInvokingTask task1 = new TestMethodInvokingTask();
|
|
|
|
|
MethodInvokingJobDetailFactoryBean mijdfb = new MethodInvokingJobDetailFactoryBean();
|
|
|
|
|
mijdfb.setBeanName("myJob1");
|
|
|
|
|
mijdfb.setTargetObject(task1);
|
|
|
|
|
mijdfb.setTargetMethod("doSomething");
|
|
|
|
|
mijdfb.afterPropertiesSet();
|
|
|
|
|
JobDetail jobDetail1 = mijdfb.getObject();
|
|
|
|
|
|
|
|
|
|
SimpleTriggerBean trigger1 = new SimpleTriggerBean();
|
|
|
|
|
trigger1.setBeanName("myTrigger1");
|
|
|
|
|
trigger1.setJobDetail(jobDetail1);
|
|
|
|
|
trigger1.setStartDelay(0);
|
|
|
|
|
trigger1.setRepeatInterval(20);
|
|
|
|
|
trigger1.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
final Scheduler scheduler = mock(Scheduler.class);
|
|
|
|
|
given(scheduler.getContext()).willReturn(new SchedulerContext());
|
|
|
|
|
given(scheduler.getTrigger("myTrigger1", Scheduler.DEFAULT_GROUP)).willReturn(new SimpleTrigger());
|
|
|
|
|
if (overwrite) {
|
|
|
|
|
given(scheduler.rescheduleJob("myTrigger1", Scheduler.DEFAULT_GROUP, trigger1)).willReturn(new Date());
|
|
|
|
|
}
|
|
|
|
|
given(scheduler.scheduleJob(trigger0)).willThrow(new ObjectAlreadyExistsException(""));
|
|
|
|
|
if (overwrite) {
|
|
|
|
|
given(scheduler.rescheduleJob("myTrigger0", Scheduler.DEFAULT_GROUP, trigger0)).willReturn(new Date());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean() {
|
|
|
|
|
@Override
|
|
|
|
|
protected Scheduler createScheduler(SchedulerFactory schedulerFactory, String schedulerName) {
|
|
|
|
|
return scheduler;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
schedulerFactoryBean.setJobFactory(null);
|
|
|
|
|
Map<String, Object> schedulerContext = new HashMap<String, Object>();
|
|
|
|
|
schedulerContext.put("otherTestBean", tb);
|
|
|
|
|
schedulerFactoryBean.setSchedulerContextAsMap(schedulerContext);
|
|
|
|
|
schedulerFactoryBean.setTriggers(new Trigger[] {trigger0, trigger1});
|
|
|
|
|
if (overwrite) {
|
|
|
|
|
schedulerFactoryBean.setOverwriteExistingJobs(true);
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
schedulerFactoryBean.afterPropertiesSet();
|
|
|
|
|
schedulerFactoryBean.start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
schedulerFactoryBean.destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
verify(scheduler).getTrigger("myTrigger0", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
verify(scheduler).getTrigger("myTrigger1", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
if (overwrite) {
|
|
|
|
|
verify(scheduler).addJob(jobDetail1, true);
|
|
|
|
|
verify(scheduler).rescheduleJob("myTrigger1", Scheduler.DEFAULT_GROUP, trigger1);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
verify(scheduler).getJobDetail("myJob0", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
}
|
|
|
|
|
verify(scheduler).addJob(jobDetail0, true);
|
|
|
|
|
verify(scheduler).start();
|
|
|
|
|
verify(scheduler).shutdown(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
@SuppressWarnings("deprecation")
|
|
|
|
|
public void testSchedulerFactoryBeanWithListeners() throws Exception {
|
|
|
|
|
JobFactory jobFactory = new AdaptableJobFactory();
|
|
|
|
|
|
|
|
|
|
final Scheduler scheduler = mock(Scheduler.class);
|
|
|
|
|
|
|
|
|
|
SchedulerListener schedulerListener = new TestSchedulerListener();
|
|
|
|
|
JobListener globalJobListener = new TestJobListener();
|
|
|
|
|
JobListener jobListener = new TestJobListener();
|
|
|
|
|
TriggerListener globalTriggerListener = new TestTriggerListener();
|
|
|
|
|
TriggerListener triggerListener = new TestTriggerListener();
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean() {
|
|
|
|
|
@Override
|
|
|
|
|
protected Scheduler createScheduler(SchedulerFactory schedulerFactory, String schedulerName) {
|
|
|
|
|
return scheduler;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
schedulerFactoryBean.setJobFactory(jobFactory);
|
|
|
|
|
schedulerFactoryBean.setSchedulerListeners(new SchedulerListener[] {schedulerListener});
|
|
|
|
|
schedulerFactoryBean.setGlobalJobListeners(new JobListener[] {globalJobListener});
|
|
|
|
|
schedulerFactoryBean.setJobListeners(new JobListener[] {jobListener});
|
|
|
|
|
schedulerFactoryBean.setGlobalTriggerListeners(new TriggerListener[] {globalTriggerListener});
|
|
|
|
|
schedulerFactoryBean.setTriggerListeners(new TriggerListener[] {triggerListener});
|
|
|
|
|
try {
|
|
|
|
|
schedulerFactoryBean.afterPropertiesSet();
|
|
|
|
|
schedulerFactoryBean.start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
schedulerFactoryBean.destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
verify(scheduler).setJobFactory(jobFactory);
|
|
|
|
|
verify(scheduler).addSchedulerListener(schedulerListener);
|
|
|
|
|
verify(scheduler).addGlobalJobListener(globalJobListener);
|
|
|
|
|
verify(scheduler).addJobListener(jobListener);
|
|
|
|
|
verify(scheduler).addGlobalTriggerListener(globalTriggerListener);
|
|
|
|
|
verify(scheduler).addTriggerListener(triggerListener);
|
|
|
|
|
verify(scheduler).start();
|
|
|
|
|
verify(scheduler).shutdown(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Ignore @Test
|
|
|
|
|
public void testMethodInvocationWithConcurrency() throws Exception {
|
|
|
|
|
Assume.group(TestGroup.PERFORMANCE);
|
|
|
|
|
methodInvokingConcurrency(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// We can't test both since Quartz somehow seems to keep things in memory
|
|
|
|
|
// enable both and one of them will fail (order doesn't matter).
|
|
|
|
|
@Ignore @Test
|
|
|
|
|
public void testMethodInvocationWithoutConcurrency() throws Exception {
|
|
|
|
|
Assume.group(TestGroup.PERFORMANCE);
|
|
|
|
|
methodInvokingConcurrency(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void methodInvokingConcurrency(boolean concurrent) throws Exception {
|
|
|
|
|
// Test the concurrency flag.
|
|
|
|
|
// Method invoking job with two triggers.
|
|
|
|
|
// If the concurrent flag is false, the triggers are NOT allowed
|
|
|
|
|
// to interfere with each other.
|
|
|
|
|
|
|
|
|
|
TestMethodInvokingTask task1 = new TestMethodInvokingTask();
|
|
|
|
|
MethodInvokingJobDetailFactoryBean mijdfb = new MethodInvokingJobDetailFactoryBean();
|
|
|
|
|
// set the concurrency flag!
|
|
|
|
|
mijdfb.setConcurrent(concurrent);
|
|
|
|
|
mijdfb.setBeanName("myJob1");
|
|
|
|
|
mijdfb.setTargetObject(task1);
|
|
|
|
|
mijdfb.setTargetMethod("doWait");
|
|
|
|
|
mijdfb.afterPropertiesSet();
|
|
|
|
|
JobDetail jobDetail1 = mijdfb.getObject();
|
|
|
|
|
|
|
|
|
|
SimpleTriggerBean trigger0 = new SimpleTriggerBean();
|
|
|
|
|
trigger0.setBeanName("myTrigger1");
|
|
|
|
|
trigger0.setJobDetail(jobDetail1);
|
|
|
|
|
trigger0.setStartDelay(0);
|
|
|
|
|
trigger0.setRepeatInterval(1);
|
|
|
|
|
trigger0.setRepeatCount(1);
|
|
|
|
|
trigger0.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
SimpleTriggerBean trigger1 = new SimpleTriggerBean();
|
|
|
|
|
trigger1.setBeanName("myTrigger1");
|
|
|
|
|
trigger1.setJobDetail(jobDetail1);
|
|
|
|
|
trigger1.setStartDelay(1000L);
|
|
|
|
|
trigger1.setRepeatInterval(1);
|
|
|
|
|
trigger1.setRepeatCount(1);
|
|
|
|
|
trigger1.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
|
|
|
|
|
schedulerFactoryBean.setJobDetails(new JobDetail[] {jobDetail1});
|
|
|
|
|
schedulerFactoryBean.setTriggers(new Trigger[] {trigger1, trigger0});
|
|
|
|
|
schedulerFactoryBean.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
// ok scheduler is set up... let's wait for like 4 seconds
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(4000);
|
|
|
|
|
}
|
|
|
|
|
catch (InterruptedException ex) {
|
|
|
|
|
// fall through
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (concurrent) {
|
|
|
|
|
assertEquals(2, task1.counter);
|
|
|
|
|
task1.stop();
|
|
|
|
|
// we're done, both jobs have ran, let's call it a day
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
assertEquals(1, task1.counter);
|
|
|
|
|
task1.stop();
|
|
|
|
|
// we need to check whether or not the test succeed with non-concurrent jobs
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(4000);
|
|
|
|
|
}
|
|
|
|
|
catch (InterruptedException ex) {
|
|
|
|
|
// fall through
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
task1.stop();
|
|
|
|
|
assertEquals(2, task1.counter);
|
|
|
|
|
|
|
|
|
|
// Although we're destroying the scheduler, it does seem to keep things in memory:
|
|
|
|
|
// When executing both tests (concurrent and non-concurrent), the second test always
|
|
|
|
|
// fails.
|
|
|
|
|
schedulerFactoryBean.destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testSchedulerFactoryBeanWithPlainQuartzObjects() throws Exception {
|
|
|
|
|
JobFactory jobFactory = new AdaptableJobFactory();
|
|
|
|
|
|
|
|
|
|
TestBean tb = new TestBean("tb", 99);
|
|
|
|
|
JobDetail jobDetail0 = new JobDetail();
|
|
|
|
|
jobDetail0.setJobClass(Job.class);
|
|
|
|
|
jobDetail0.setName("myJob0");
|
|
|
|
|
jobDetail0.setGroup(Scheduler.DEFAULT_GROUP);
|
|
|
|
|
jobDetail0.getJobDataMap().put("testBean", tb);
|
|
|
|
|
assertEquals(tb, jobDetail0.getJobDataMap().get("testBean"));
|
|
|
|
|
|
|
|
|
|
CronTrigger trigger0 = new CronTrigger();
|
|
|
|
|
trigger0.setName("myTrigger0");
|
|
|
|
|
trigger0.setGroup(Scheduler.DEFAULT_GROUP);
|
|
|
|
|
trigger0.setJobName("myJob0");
|
|
|
|
|
trigger0.setJobGroup(Scheduler.DEFAULT_GROUP);
|
|
|
|
|
trigger0.setStartTime(new Date());
|
|
|
|
|
trigger0.setCronExpression("0/1 * * * * ?");
|
|
|
|
|
|
|
|
|
|
TestMethodInvokingTask task1 = new TestMethodInvokingTask();
|
|
|
|
|
MethodInvokingJobDetailFactoryBean mijdfb = new MethodInvokingJobDetailFactoryBean();
|
|
|
|
|
mijdfb.setName("myJob1");
|
|
|
|
|
mijdfb.setGroup(Scheduler.DEFAULT_GROUP);
|
|
|
|
|
mijdfb.setTargetObject(task1);
|
|
|
|
|
mijdfb.setTargetMethod("doSomething");
|
|
|
|
|
mijdfb.afterPropertiesSet();
|
|
|
|
|
JobDetail jobDetail1 = mijdfb.getObject();
|
|
|
|
|
|
|
|
|
|
SimpleTrigger trigger1 = new SimpleTrigger();
|
|
|
|
|
trigger1.setName("myTrigger1");
|
|
|
|
|
trigger1.setGroup(Scheduler.DEFAULT_GROUP);
|
|
|
|
|
trigger1.setJobName("myJob1");
|
|
|
|
|
trigger1.setJobGroup(Scheduler.DEFAULT_GROUP);
|
|
|
|
|
trigger1.setStartTime(new Date());
|
|
|
|
|
trigger1.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
|
|
|
|
|
trigger1.setRepeatInterval(20);
|
|
|
|
|
|
|
|
|
|
final Scheduler scheduler = mock(Scheduler.class);
|
|
|
|
|
given(scheduler.scheduleJob(trigger0)).willReturn(new Date());
|
|
|
|
|
given(scheduler.scheduleJob(trigger1)).willReturn(new Date());
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean() {
|
|
|
|
|
@Override
|
|
|
|
|
protected Scheduler createScheduler(SchedulerFactory schedulerFactory, String schedulerName) {
|
|
|
|
|
return scheduler;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
schedulerFactoryBean.setJobFactory(jobFactory);
|
|
|
|
|
schedulerFactoryBean.setJobDetails(new JobDetail[] {jobDetail0, jobDetail1});
|
|
|
|
|
schedulerFactoryBean.setTriggers(new Trigger[] {trigger0, trigger1});
|
|
|
|
|
try {
|
|
|
|
|
schedulerFactoryBean.afterPropertiesSet();
|
|
|
|
|
schedulerFactoryBean.start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
schedulerFactoryBean.destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
verify(scheduler).setJobFactory(jobFactory);
|
|
|
|
|
verify(scheduler).getJobDetail("myJob0", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
verify(scheduler).getJobDetail("myJob1", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
verify(scheduler).getTrigger("myTrigger0", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
verify(scheduler).getTrigger("myTrigger1", Scheduler.DEFAULT_GROUP);
|
|
|
|
|
verify(scheduler).addJob(jobDetail0, true);
|
|
|
|
|
verify(scheduler).addJob(jobDetail1, true);
|
|
|
|
|
verify(scheduler).scheduleJob(trigger0);
|
|
|
|
|
verify(scheduler).scheduleJob(trigger1);
|
|
|
|
|
verify(scheduler).start();
|
|
|
|
|
verify(scheduler).shutdown(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testSchedulerFactoryBeanWithApplicationContext() throws Exception {
|
|
|
|
|
TestBean tb = new TestBean("tb", 99);
|
|
|
|
|
@@ -571,68 +91,6 @@ public class QuartzSupportTests {
|
|
|
|
|
verify(scheduler).shutdown(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testJobDetailBeanWithApplicationContext() throws Exception {
|
|
|
|
|
TestBean tb = new TestBean("tb", 99);
|
|
|
|
|
StaticApplicationContext ac = new StaticApplicationContext();
|
|
|
|
|
|
|
|
|
|
JobDetailBean jobDetail = new JobDetailBean();
|
|
|
|
|
jobDetail.setJobClass(Job.class);
|
|
|
|
|
jobDetail.setBeanName("myJob0");
|
|
|
|
|
Map<String, Object> jobData = new HashMap<String, Object>();
|
|
|
|
|
jobData.put("testBean", tb);
|
|
|
|
|
jobDetail.setJobDataAsMap(jobData);
|
|
|
|
|
jobDetail.setApplicationContext(ac);
|
|
|
|
|
jobDetail.setApplicationContextJobDataKey("appCtx");
|
|
|
|
|
jobDetail.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
assertEquals(tb, jobDetail.getJobDataMap().get("testBean"));
|
|
|
|
|
assertEquals(ac, jobDetail.getJobDataMap().get("appCtx"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
@SuppressWarnings("deprecation")
|
|
|
|
|
public void testMethodInvokingJobDetailFactoryBeanWithListenerNames() throws Exception {
|
|
|
|
|
TestMethodInvokingTask task = new TestMethodInvokingTask();
|
|
|
|
|
MethodInvokingJobDetailFactoryBean mijdfb = new MethodInvokingJobDetailFactoryBean();
|
|
|
|
|
String[] names = new String[] {"test1", "test2"};
|
|
|
|
|
mijdfb.setName("myJob1");
|
|
|
|
|
mijdfb.setGroup(Scheduler.DEFAULT_GROUP);
|
|
|
|
|
mijdfb.setTargetObject(task);
|
|
|
|
|
mijdfb.setTargetMethod("doSomething");
|
|
|
|
|
mijdfb.setJobListenerNames(names);
|
|
|
|
|
mijdfb.afterPropertiesSet();
|
|
|
|
|
JobDetail jobDetail = mijdfb.getObject();
|
|
|
|
|
assertArrayEquals(names, jobDetail.getJobListenerNames());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
@SuppressWarnings("deprecation")
|
|
|
|
|
public void testJobDetailBeanWithListenerNames() {
|
|
|
|
|
JobDetailBean jobDetail = new JobDetailBean();
|
|
|
|
|
String[] names = new String[] {"test1", "test2"};
|
|
|
|
|
jobDetail.setJobListenerNames(names);
|
|
|
|
|
assertArrayEquals(names, jobDetail.getJobListenerNames());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
@SuppressWarnings("deprecation")
|
|
|
|
|
public void testCronTriggerBeanWithListenerNames() {
|
|
|
|
|
CronTriggerBean trigger = new CronTriggerBean();
|
|
|
|
|
String[] names = new String[] {"test1", "test2"};
|
|
|
|
|
trigger.setTriggerListenerNames(names);
|
|
|
|
|
assertArrayEquals(names, trigger.getTriggerListenerNames());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
@SuppressWarnings("deprecation")
|
|
|
|
|
public void testSimpleTriggerBeanWithListenerNames() {
|
|
|
|
|
SimpleTriggerBean trigger = new SimpleTriggerBean();
|
|
|
|
|
String[] names = new String[] {"test1", "test2"};
|
|
|
|
|
trigger.setTriggerListenerNames(names);
|
|
|
|
|
assertArrayEquals(names, trigger.getTriggerListenerNames());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testSchedulerWithTaskExecutor() throws Exception {
|
|
|
|
|
Assume.group(TestGroup.PERFORMANCE);
|
|
|
|
|
@@ -640,11 +98,11 @@ public class QuartzSupportTests {
|
|
|
|
|
CountingTaskExecutor taskExecutor = new CountingTaskExecutor();
|
|
|
|
|
DummyJob.count = 0;
|
|
|
|
|
|
|
|
|
|
JobDetail jobDetail = new JobDetail();
|
|
|
|
|
JobDetailImpl jobDetail = new JobDetailImpl();
|
|
|
|
|
jobDetail.setJobClass(DummyJob.class);
|
|
|
|
|
jobDetail.setName("myJob");
|
|
|
|
|
|
|
|
|
|
SimpleTriggerBean trigger = new SimpleTriggerBean();
|
|
|
|
|
SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
|
|
|
|
|
trigger.setName("myTrigger");
|
|
|
|
|
trigger.setJobDetail(jobDetail);
|
|
|
|
|
trigger.setStartDelay(1);
|
|
|
|
|
@@ -654,8 +112,8 @@ public class QuartzSupportTests {
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean bean = new SchedulerFactoryBean();
|
|
|
|
|
bean.setTaskExecutor(taskExecutor);
|
|
|
|
|
bean.setTriggers(new Trigger[] {trigger});
|
|
|
|
|
bean.setJobDetails(new JobDetail[] {jobDetail});
|
|
|
|
|
bean.setTriggers(trigger.getObject());
|
|
|
|
|
bean.setJobDetails(jobDetail);
|
|
|
|
|
bean.afterPropertiesSet();
|
|
|
|
|
bean.start();
|
|
|
|
|
|
|
|
|
|
@@ -672,11 +130,11 @@ public class QuartzSupportTests {
|
|
|
|
|
|
|
|
|
|
DummyRunnable.count = 0;
|
|
|
|
|
|
|
|
|
|
JobDetail jobDetail = new JobDetailBean();
|
|
|
|
|
jobDetail.setJobClass(DummyRunnable.class);
|
|
|
|
|
JobDetailImpl jobDetail = new JobDetailImpl();
|
|
|
|
|
jobDetail.setJobClass((Class) DummyRunnable.class);
|
|
|
|
|
jobDetail.setName("myJob");
|
|
|
|
|
|
|
|
|
|
SimpleTriggerBean trigger = new SimpleTriggerBean();
|
|
|
|
|
SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
|
|
|
|
|
trigger.setName("myTrigger");
|
|
|
|
|
trigger.setJobDetail(jobDetail);
|
|
|
|
|
trigger.setStartDelay(1);
|
|
|
|
|
@@ -685,8 +143,8 @@ public class QuartzSupportTests {
|
|
|
|
|
trigger.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean bean = new SchedulerFactoryBean();
|
|
|
|
|
bean.setTriggers(new Trigger[] {trigger});
|
|
|
|
|
bean.setJobDetails(new JobDetail[] {jobDetail});
|
|
|
|
|
bean.setTriggers(trigger.getObject());
|
|
|
|
|
bean.setJobDetails(jobDetail);
|
|
|
|
|
bean.afterPropertiesSet();
|
|
|
|
|
bean.start();
|
|
|
|
|
|
|
|
|
|
@@ -703,12 +161,12 @@ public class QuartzSupportTests {
|
|
|
|
|
DummyJob.param = 0;
|
|
|
|
|
DummyJob.count = 0;
|
|
|
|
|
|
|
|
|
|
JobDetail jobDetail = new JobDetail();
|
|
|
|
|
JobDetailImpl jobDetail = new JobDetailImpl();
|
|
|
|
|
jobDetail.setJobClass(DummyJobBean.class);
|
|
|
|
|
jobDetail.setName("myJob");
|
|
|
|
|
jobDetail.getJobDataMap().put("param", "10");
|
|
|
|
|
|
|
|
|
|
SimpleTriggerBean trigger = new SimpleTriggerBean();
|
|
|
|
|
SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
|
|
|
|
|
trigger.setName("myTrigger");
|
|
|
|
|
trigger.setJobDetail(jobDetail);
|
|
|
|
|
trigger.setStartDelay(1);
|
|
|
|
|
@@ -717,8 +175,8 @@ public class QuartzSupportTests {
|
|
|
|
|
trigger.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean bean = new SchedulerFactoryBean();
|
|
|
|
|
bean.setTriggers(new Trigger[] {trigger});
|
|
|
|
|
bean.setJobDetails(new JobDetail[] {jobDetail});
|
|
|
|
|
bean.setTriggers(trigger.getObject());
|
|
|
|
|
bean.setJobDetails(jobDetail);
|
|
|
|
|
bean.afterPropertiesSet();
|
|
|
|
|
bean.start();
|
|
|
|
|
|
|
|
|
|
@@ -736,13 +194,13 @@ public class QuartzSupportTests {
|
|
|
|
|
DummyJob.param = 0;
|
|
|
|
|
DummyJob.count = 0;
|
|
|
|
|
|
|
|
|
|
JobDetail jobDetail = new JobDetail();
|
|
|
|
|
JobDetailImpl jobDetail = new JobDetailImpl();
|
|
|
|
|
jobDetail.setJobClass(DummyJob.class);
|
|
|
|
|
jobDetail.setName("myJob");
|
|
|
|
|
jobDetail.getJobDataMap().put("param", "10");
|
|
|
|
|
jobDetail.getJobDataMap().put("ignoredParam", "10");
|
|
|
|
|
|
|
|
|
|
SimpleTriggerBean trigger = new SimpleTriggerBean();
|
|
|
|
|
SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
|
|
|
|
|
trigger.setName("myTrigger");
|
|
|
|
|
trigger.setJobDetail(jobDetail);
|
|
|
|
|
trigger.setStartDelay(1);
|
|
|
|
|
@@ -752,8 +210,8 @@ public class QuartzSupportTests {
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean bean = new SchedulerFactoryBean();
|
|
|
|
|
bean.setJobFactory(new SpringBeanJobFactory());
|
|
|
|
|
bean.setTriggers(new Trigger[] {trigger});
|
|
|
|
|
bean.setJobDetails(new JobDetail[] {jobDetail});
|
|
|
|
|
bean.setTriggers(trigger.getObject());
|
|
|
|
|
bean.setJobDetails(jobDetail);
|
|
|
|
|
bean.afterPropertiesSet();
|
|
|
|
|
bean.start();
|
|
|
|
|
|
|
|
|
|
@@ -767,16 +225,17 @@ public class QuartzSupportTests {
|
|
|
|
|
@Test
|
|
|
|
|
public void testSchedulerWithSpringBeanJobFactoryAndParamMismatchNotIgnored() throws Exception {
|
|
|
|
|
Assume.group(TestGroup.PERFORMANCE);
|
|
|
|
|
|
|
|
|
|
DummyJob.param = 0;
|
|
|
|
|
DummyJob.count = 0;
|
|
|
|
|
|
|
|
|
|
JobDetail jobDetail = new JobDetail();
|
|
|
|
|
JobDetailImpl jobDetail = new JobDetailImpl();
|
|
|
|
|
jobDetail.setJobClass(DummyJob.class);
|
|
|
|
|
jobDetail.setName("myJob");
|
|
|
|
|
jobDetail.getJobDataMap().put("para", "10");
|
|
|
|
|
jobDetail.getJobDataMap().put("ignoredParam", "10");
|
|
|
|
|
|
|
|
|
|
SimpleTriggerBean trigger = new SimpleTriggerBean();
|
|
|
|
|
SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
|
|
|
|
|
trigger.setName("myTrigger");
|
|
|
|
|
trigger.setJobDetail(jobDetail);
|
|
|
|
|
trigger.setStartDelay(1);
|
|
|
|
|
@@ -786,10 +245,10 @@ public class QuartzSupportTests {
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean bean = new SchedulerFactoryBean();
|
|
|
|
|
SpringBeanJobFactory jobFactory = new SpringBeanJobFactory();
|
|
|
|
|
jobFactory.setIgnoredUnknownProperties(new String[] {"ignoredParam"});
|
|
|
|
|
jobFactory.setIgnoredUnknownProperties("ignoredParam");
|
|
|
|
|
bean.setJobFactory(jobFactory);
|
|
|
|
|
bean.setTriggers(new Trigger[] {trigger});
|
|
|
|
|
bean.setJobDetails(new JobDetail[] {jobDetail});
|
|
|
|
|
bean.setTriggers(trigger.getObject());
|
|
|
|
|
bean.setJobDetails(jobDetail);
|
|
|
|
|
bean.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
Thread.sleep(500);
|
|
|
|
|
@@ -806,12 +265,12 @@ public class QuartzSupportTests {
|
|
|
|
|
DummyRunnable.param = 0;
|
|
|
|
|
DummyRunnable.count = 0;
|
|
|
|
|
|
|
|
|
|
JobDetail jobDetail = new JobDetailBean();
|
|
|
|
|
jobDetail.setJobClass(DummyRunnable.class);
|
|
|
|
|
JobDetailImpl jobDetail = new JobDetailImpl();
|
|
|
|
|
jobDetail.setJobClass((Class) DummyRunnable.class);
|
|
|
|
|
jobDetail.setName("myJob");
|
|
|
|
|
jobDetail.getJobDataMap().put("param", "10");
|
|
|
|
|
|
|
|
|
|
SimpleTriggerBean trigger = new SimpleTriggerBean();
|
|
|
|
|
SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
|
|
|
|
|
trigger.setName("myTrigger");
|
|
|
|
|
trigger.setJobDetail(jobDetail);
|
|
|
|
|
trigger.setStartDelay(1);
|
|
|
|
|
@@ -821,8 +280,8 @@ public class QuartzSupportTests {
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean bean = new SchedulerFactoryBean();
|
|
|
|
|
bean.setJobFactory(new SpringBeanJobFactory());
|
|
|
|
|
bean.setTriggers(new Trigger[] {trigger});
|
|
|
|
|
bean.setJobDetails(new JobDetail[] {jobDetail});
|
|
|
|
|
bean.setTriggers(trigger.getObject());
|
|
|
|
|
bean.setJobDetails(jobDetail);
|
|
|
|
|
bean.afterPropertiesSet();
|
|
|
|
|
bean.start();
|
|
|
|
|
|
|
|
|
|
@@ -839,12 +298,12 @@ public class QuartzSupportTests {
|
|
|
|
|
DummyJobBean.param = 0;
|
|
|
|
|
DummyJobBean.count = 0;
|
|
|
|
|
|
|
|
|
|
JobDetail jobDetail = new JobDetail();
|
|
|
|
|
JobDetailImpl jobDetail = new JobDetailImpl();
|
|
|
|
|
jobDetail.setJobClass(DummyJobBean.class);
|
|
|
|
|
jobDetail.setName("myJob");
|
|
|
|
|
jobDetail.getJobDataMap().put("param", "10");
|
|
|
|
|
|
|
|
|
|
SimpleTriggerBean trigger = new SimpleTriggerBean();
|
|
|
|
|
SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
|
|
|
|
|
trigger.setName("myTrigger");
|
|
|
|
|
trigger.setJobDetail(jobDetail);
|
|
|
|
|
trigger.setStartDelay(1);
|
|
|
|
|
@@ -854,8 +313,8 @@ public class QuartzSupportTests {
|
|
|
|
|
|
|
|
|
|
SchedulerFactoryBean bean = new SchedulerFactoryBean();
|
|
|
|
|
bean.setJobFactory(new SpringBeanJobFactory());
|
|
|
|
|
bean.setTriggers(new Trigger[] {trigger});
|
|
|
|
|
bean.setJobDetails(new JobDetail[] {jobDetail});
|
|
|
|
|
bean.setTriggers(trigger.getObject());
|
|
|
|
|
bean.setJobDetails(jobDetail);
|
|
|
|
|
bean.afterPropertiesSet();
|
|
|
|
|
bean.start();
|
|
|
|
|
|
|
|
|
|
@@ -992,116 +451,10 @@ public class QuartzSupportTests {
|
|
|
|
|
try {
|
|
|
|
|
// assertEquals(10, DummyJob.param);
|
|
|
|
|
assertTrue(DummyJob.count > 0);
|
|
|
|
|
} finally {
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
ctx.close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static class TestSchedulerListener implements SchedulerListener {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void jobScheduled(Trigger trigger) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void jobUnscheduled(String triggerName, String triggerGroup) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void triggerFinalized(Trigger trigger) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void triggersPaused(String triggerName, String triggerGroup) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void triggersResumed(String triggerName, String triggerGroup) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void jobsPaused(String jobName, String jobGroup) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void jobsResumed(String jobName, String jobGroup) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void schedulerError(String msg, SchedulerException cause) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void schedulerShutdown() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void jobAdded(JobDetail jobDetail) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void jobDeleted(String s, String s1) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void schedulerInStandbyMode() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void schedulerStarted() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void schedulerShuttingdown() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static class TestJobListener implements JobListener {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String getName() {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void jobToBeExecuted(JobExecutionContext context) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void jobExecutionVetoed(JobExecutionContext context) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static class TestTriggerListener implements TriggerListener {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String getName() {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void triggerFired(Trigger trigger, JobExecutionContext context) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void triggerMisfired(Trigger trigger) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void triggerComplete(Trigger trigger, JobExecutionContext context, int triggerInstructionCode) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|