JobScheduler, MkII

I’ve just re-written the JobScheduler, but can’t commit it from this hotel which blocks everything except web traffic. The new implementation has pluggable re-scheduling strategies, with three initial implementations for running once, running at fixed intervals with a random initial wait and for running on a boundary, such as on the hour or on the minute.

This testbed:

// import tv.zignal.log4es.LogFactory
// import tv.zignal.log4es.Logger
// import tv.zignal.integration.browser.FirebugLogAppender
// import tv.zignal.karateka.jobscheduler.BrowserTimerAdapter
// import tv.zignal.karateka.jobscheduler.JobScheduler

// Set up logging and the scheduler
var logger = LogFactory.getLogger("tv.zignal.testbed");
LogFactory.addAppender(new FirebugLogAppender(Logger.DEBUG));
var scheduler = new JobScheduler(new BrowserTimerAdapter());
//scheduler.log.setLevel(Logger.DEBUG);  // enable to see JobScheduler inner workings

// Schedule four greetings to run at particular times
var now = new Date().getTime();
var hello = function hello() { logger.info("Hello!"); };
var anyone = function anyone() { logger.info("Anyone?"); };
var hi = function hi() { logger.info("Hi!"); };
scheduler.addOneTimeJob(hello, 10000);
scheduler.addOneTimeJob(anyone, 20000);
scheduler.addOneTimeJob(hi, 15000);
scheduler.addOneTimeJob(hi, 5000);

// Tell the time every ten seconds, on the ten-second mark. This would be useful for an on-screen clock.
var clockTick = function clockTick() { logger.info("It is now " + new Date()); };
scheduler.addJob(clockTick, null, new OnTheTickJobRescheduler(10 * 1000), "clock");

// Call "Yo!" every four seconds, not on any particular boundary.
var yo = function yo() { logger.info("Yo!"); };
scheduler.addRepeatableJob(yo, 4 * 1000, "yo");

// Cancel yo job after 30 seconds
var cancelYo = function cancelYo() {
    scheduler.cancelJob("yo")
    logger.info("Stopping the yo-yo");
}
scheduler.addOneTimeJob(cancelYo, 30*1000);

will produce this output in the firebug console:

tv.zignal.testbed | Yo!
tv.zignal.testbed | It is now Sat Oct 27 2007 19:18:30 GMT+0000 (GMT)
tv.zignal.testbed | Yo!
tv.zignal.testbed | Hi!
tv.zignal.testbed | Yo!
tv.zignal.testbed | Hello!
tv.zignal.testbed | Yo!
tv.zignal.testbed | It is now Sat Oct 27 2007 19:18:40 GMT+0000 (GMT)
tv.zignal.testbed | Hi!
tv.zignal.testbed | Yo!
tv.zignal.testbed | Anyone?
tv.zignal.testbed | Yo!
tv.zignal.testbed | It is now Sat Oct 27 2007 19:18:50 GMT+0000 (GMT)
tv.zignal.testbed | Yo!
tv.zignal.testbed | Yo!
tv.zignal.testbed | Stopping the yo-yo
tv.zignal.testbed | It is now Sat Oct 27 2007 19:19:00 GMT+0000 (GMT)
tv.zignal.testbed | It is now Sat Oct 27 2007 19:19:10 GMT+0000 (GMT)
tv.zignal.testbed | It is now Sat Oct 27 2007 19:19:20 GMT+0000 (GMT)

and a lot more if you un-comment the line setting the shceduler log level to debug.

Leave a Reply

You must be logged in to post a comment.