Quartz Jobs Not Kicking Off

Правка: Я использую кварц-2.1.5.jar. Вот краткое изложение моих классов:

HttpPollingJobрасширяет PollingJobрасширяет ScheduledJobреализует org.quartz.Job

Конкретно:

1) ScheduledJobреализует Quartz Job(абстрактный базовый класс для всех моих типов Job):

import org.quartz.Job;
import org.quartz.Trigger;

public abstract class ScheduledJob implements Job {
    private Trigger trigger;

    public ScheduledJob() {
        this(null);
    }

    public ScheduledJob(Trigger trig) {
        super();

        if(trig == null)
            trig = getDefaultTrigger();

        setTrigger(trig);
    }

    public Trigger getTrigger() {
        return trigger;
    }

    public void setTrigger(final Trigger trig) {
        trigger = trig;
    }

    protected abstract Trigger getDefaultTrigger();
}

2) PollingJobрасширяет ScheduledJob- все "социологи" опрашивают некоторый ресурс/конечную точку с определенной частотой:

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;

import com.me.jobs.ScheduledJob;

public abstract class PollingJob extends ScheduledJob {
    private static long DEF_FREQUENCY = 10 * 1000; // 10 secs
    private String name;    
    private long frequency;

    public PollingJob(final String nm) {
        this(nm, DEF_FREQUENCY);
    }

    public PollingJob(final String nm, final long freq) {
        super();

        setName(nm);
        setFrequency(freq);
    }

    public abstract void poll(JobExecutionContext context);

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        poll(context);      
    }

    public String getName() {
        return name;
    }

    public void setName(final String nm) {
        name = nm;
    }

    public long getFrequency() {
        return frequency;
    }

    public void setFrequency(final long freq) {
        frequency = freq;
    }

    protected final Trigger getDefaultTrigger()  {
        TriggerBuilder<?> triggerBuilder = TriggerBuilder.newTrigger()
            .startNow()
            .withSchedule(SimpleScheduleBuilder.simpleSchedule()
            .withIntervalInMilliseconds(DEF_FREQUENCY));

        return triggerBuilder.build();
    }
}

3) HttpPollingJobрасширяет PollingJob- "HTTP-опросники" опрашивают веб-сервер (используя HTtpClient):

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.quartz.JobExecutionContext;

import com.me.MonitoredEvent;
import com.me.MonitoredEventRegistrar;

public class HttpPollingJob extends PollingJob {
    private String serverURL;
    private org.slf4j.Logger logger =
        org.slf4j.LoggerFactory.getLogger(HttpPollingJob.class);

    public HttpPollingJob(final String nm, final String server) {
        super(nm);

        setServerURL(server);
    }

    public String getServerURL() {
        return serverURL;
    }

    public void setServerURL(final String server) {
        serverURL = server;
    }

    @Override
    public final void poll(JobExecutionContext context) {
        MonitoredEvent event = null;

        try {
            // This is where we would use HttpClient to connect to a web server and poll it.
            System.out.println("Job fired!");
        }
        catch(Throwable thrown) {
            logger.error(thrown.getMessage());
        }
    }
}

4) JobDriver- определяет несколько HttpPollingJobи использует Quartz для их запуска:

public class JobDriver {
    private List<HttpPollingJob> jobs;

    public JobDriver() {
        HttpPollingJob job1 = new HttpPollingJob("job-1", "http://www.example.com/1");
        HttpPollingJob job2 = new HttpPollingJob("job-2", "http://www.example.com/2");
        HttpPollingJob job3 = new HttpPollingJob("job-3", "http://www.example.com/3");

        jobs = new ArrayList<HttpPollingJob>();
        jobs.add(job1);
        jobs.add(job2);
        jobs.add(job3);
    }

    public static void main(String[] args) {
    JobDriver driver = new JobDriver();
        driver.startJobs();
    }

    private void startJobs() {
        try {
            // Obtain a basic SchedulerFactory and fire it up.
            SchedulerFactory schedulerFactory = new org.quartz.impl.StdSchedulerFactory();
            Scheduler scheduler = schedulerFactory.getScheduler();
            scheduler.start();

            // Define a job for every declared monitor.
            JobBuilder jobBuilder = null;

            for(ScheduledJob job : jobs) {

            Trigger trigger = job.getTrigger();
            jobBuilder = JobBuilder.newJob(job.getClass());

            // Bind the current job to this trigger.
            scheduler.scheduleJob(jobBuilder.build(), trigger);

            // TODO: Shut the scheduler down politely?!?!
        }
        catch(Throwable exc) {
            logger.error(exc.getMessage());

            // Force application to kick out.
            throw new RuntimeException(exc);
        }
    }
}

Когда я запускаю этот код, я получаю идеальный запуск без ошибок или исключений времени выполнения. Если я посыпаю операторами System.out.println, я увижу, что каждая строка кода выполняется безупречно. Единственная проблема заключается в том, что, как только программа запущена, она не печатает " Job fired! " сообщение, указывающее на то, что задание опроса запускается.

Я перепробовал каждую комбинацию start()и shutdown()Я безрезультатно могу придумать. Могут ли какие-нибудь мастера Quartz посмотреть на этот код и сказать мне, почему работа не работает?

В журналах (я настроил log4j) я вижу рабочий поток Quartz, создаваемый для запланированного задания. Я чувствую, что нахожусь на 99% пути туда, но просто упускаю что-то очевидное. Заранее спасибо!

7
задан IAmYourFaja 10 July 2012 в 13:47
поделиться