Skip to content

Commit

Permalink
Allow multiple schedulers to be created [IMMUTANT-539]
Browse files Browse the repository at this point in the history
We do this by appending the given scheduler name to the default name and
id to prevent the subsequent schedulers from clashing with the first.
  • Loading branch information
tobias committed Mar 19, 2015
1 parent 999bb14 commit 6466af6
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 7 deletions.
Expand Up @@ -17,8 +17,8 @@
package org.projectodd.wunderboss.scheduling;

import org.projectodd.wunderboss.Options;
import org.projectodd.wunderboss.singleton.SingletonContext;
import org.projectodd.wunderboss.WunderBoss;
import org.projectodd.wunderboss.singleton.SingletonContext;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
Expand All @@ -31,20 +31,20 @@
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.DirectSchedulerFactory;
import org.quartz.listeners.SchedulerListenerSupport;
import org.quartz.listeners.TriggerListenerSupport;
import org.quartz.simpl.RAMJobStore;
import org.quartz.simpl.SimpleThreadPool;
import org.quartz.spi.JobStore;
import org.slf4j.Logger;

import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;

import static org.projectodd.wunderboss.scheduling.Scheduling.ScheduleOption.*;
import static org.quartz.impl.DirectSchedulerFactory.DEFAULT_INSTANCE_ID;
import static org.quartz.impl.DirectSchedulerFactory.DEFAULT_SCHEDULER_NAME;

public class QuartzScheduling implements Scheduling {

Expand All @@ -66,9 +66,12 @@ public void start() throws Exception {
Thread.NORM_PRIORITY);
threadPool.setThreadNamePrefix("scheduling-worker");
threadPool.initialize();
factory.createScheduler(threadPool, new RAMJobStore());
final String schedulerName = DEFAULT_SCHEDULER_NAME + ":" + this.name;
factory.createScheduler(schedulerName,
DEFAULT_INSTANCE_ID + ":" + this.name,
threadPool, new RAMJobStore());

this.scheduler = factory.getScheduler();
this.scheduler = factory.getScheduler(schedulerName);
this.scheduler.getListenerManager().addTriggerListener(new TriggerListener());
this.scheduler.start();
started = true;
Expand Down
Expand Up @@ -63,8 +63,14 @@
([scheduler name count]
(TriggerUtils/computeFireTimes (trigger-for-job scheduler name), nil, count)))

(deftest multiple-schedulers
(let [other-scheduler (WunderBoss/findOrCreateComponent Scheduling "other" nil)]
(is (not= other-scheduler default))
(.start other-scheduler)
(is (not= (.scheduler other-scheduler) (.scheduler default)))))

(deftest unschedule
(let [started? (promise),
(let [started? (promise)
should-run? (atom true)]
(with-job
(fn []
Expand Down

0 comments on commit 6466af6

Please sign in to comment.