/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.terracotta.quartz.tests;
import org.junit.Assert;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
/**
*
* @author cdennis
*/
public class CrashingClient extends ClientBase {
private static ThreadLocal<Scheduler> SCHEDULER = new ThreadLocal<Scheduler>();
public CrashingClient(String[] args) {
super(args);
}
@Override
protected void test(Scheduler scheduler) throws Throwable {
JobDetail job = new CleverJobDetail(JobBuilder.newJob(NullJob.class).withIdentity("job-name", "job-group").build());
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger-name", "trigger-group").startNow().withSchedule(SimpleScheduleBuilder.repeatSecondlyForever()).build();
pass();
SCHEDULER.set(scheduler);
scheduler.scheduleJob(job, trigger);
System.exit(-1);
}
@Override
protected boolean isSynchWrite() {
return true;
}
public static class CleverJobDetail implements JobDetail {
private final JobDetail delegate;
public CleverJobDetail(JobDetail delegate) {
this.delegate = delegate;
}
@Override
public JobKey getKey() {
return delegate.getKey();
}
@Override
public String getDescription() {
return delegate.getDescription();
}
@Override
public Class<? extends Job> getJobClass() {
return delegate.getJobClass();
}
@Override
public JobDataMap getJobDataMap() {
return delegate.getJobDataMap();
}
@Override
public boolean isDurable() {
return delegate.isDurable();
}
@Override
public boolean isPersistJobDataAfterExecution() {
return delegate.isPersistJobDataAfterExecution();
}
@Override
public boolean isConcurrentExectionDisallowed() {
try {
Assert.assertTrue(SCHEDULER.get().checkExists(new JobKey("job-name", "job-group")));
} catch (SchedulerException e) {
throw new AssertionError(e);
}
Runtime.getRuntime().halt(0);
throw new AssertionError();
}
@Override
public boolean requestsRecovery() {
return delegate.requestsRecovery();
}
@Override
public CleverJobDetail clone() {
return new CleverJobDetail((JobDetail) delegate.clone());
}
@Override
public JobBuilder getJobBuilder() {
return delegate.getJobBuilder();
}
}
}