Kraken Cron

Kraken Cron provides job scheduling.

Requirements

  • kraken api 1.0.0
  • slf4j api 1.5.6
  • hsqldb 1.8.0.7

Commands

  • cron.usage
    kraken> cron.usage
    SYNTAX:
    * * * * * Runnable instance.name
    - - - - -
    | | | | |
    | | | | +----- day of week (0 - 6) (Sunday=0)
    | | | +------- month (1 - 12)
    | | +--------- day of month (1 - 31)
    | +----------- hour (0 - 23)
    +------------- min (0 - 59)
    
    EXAMPLES:
    Run once a year                       |   0 0 1 1 *
    Run once a week                       |   0 0 * * 0
    Run every five minute                 | */5 * * * *
    Run once a day from monday to friday  |   0 0 * * 1-5
    Run once a day on saturday and sunday |   0 0 * * 0,6
    
  • cron.register [rule] [instance.name]
    kraken> cron.register * * * * * sample
    new schedule [1] registered.
    
    • Run 'sample' service instance (must be Runnable) every minutes.
  • cron.unregister [schedule id]
    kraken> cron.unregister 1
    schedule unregistered.
    
    • Unregister schedule.
  • cron.list
    • List all schedules.
  • cron.queue
    • View current state of scheduling queue.
  • cron.run [instance.name]
    • Run now
  • cron.runnables
    • List all active Runnable instances.

Schedule Syntax

  • The comma (',') operator specifies a list of values.
    • For example, "1,3,4,7,8" (space inside the list must not be used)
  • The dash ('-') operator specifies a range of values.
    • For example, "1-6", which is equivalent to "1,2,3,4,5,6"
  • The asterisk ('*') operator specifies all possible values for a field.
    • For example, an asterisk in the hour time field would be equivalent to 'every hour' .
  • The slash ('/') operator (called "step"), which can be used to skip a given number of values.
    • For example, "*/3" in the hour time field is equivalent to "0,3,6,9,12,15,18,21".
  •  http://en.wikipedia.org/wiki/Cron#crontab_syntax

How to create Runnable OSGi service instance?

  • All iPOJO component instances have instance.name OSGi service property.
    • Create Runnable component using by ipojo.create command. (requires kraken ipojo bundle)
  • Check if OSGi service is registered as you want.
    • Use osgi.services and osgi.properties [service.id] commands. (requires kraken core above 1.1.0)
    • instance.name property must be exist.

Cron API

How to build Schedule object?

  • Run every minute.
    Schedule sample = new Schedule.Builder("sample").build();
    
  • Run every day.
    Schedule sample = new Schedule.Builder("sample").buildDaily();
    
  • Run every week.
    Schedule sample = new Schedule.Builder("sample").buildWeekly();
    
  • Run every month.
    Schedule sample = new Schedule.Builder("sample").buildMonthly();
    
  • Run every year.
    Schedule sample = new Schedule.Builder("sample").buildYearly();
    
  • 0 0 1 1 3-6 sample
    Schedule sample = new Schedule.Builder("sample").build("0 0 1 1 3-6"); 
    
    • If you have specified any field using .set(CronField.Type, expression) before calling .build(expression), the former specification will be ignored.
  • 0,3,5,9 4-10 */10 * 0 sample
    Schedule sample = new Schedule.Builder("sample")
                                  .set(CronField.Type.DAY_OF_WEEK, "0")
                                  .set(CronField.Type.DAY_OF_MONTH, "*/10")
                                  .set(CronField.Type.HOUR, "4-10")
                                  .set(CronField.Type.MINUTE,"0,3,5,9")
                                  .build();
    
    • If there is no explicit specificaton of a field, default value will be *(wild).

How to get CronService reference?

  • OSGi standard way
    ServiceReference ref = bundleContext.getServiceReference(CronService.class.getName());
    CronService cronService = (CronService) bundleContext.getService(ref);
    
  • iPOJO way
    • use @Requires annotation or metadata.xml configuration.
    • iPOJO will inject CronService for you.

Schedule Registration

Schedule schedule = new Schedule.Builder("sample").build();
int id = cronService.registerSchedule(schedule);

Schedule Unregistration

cronService.unregisterSchedule(id);

Class Diagram

History

  • 1.0.0 release: initial release (2009-10-19)

Attachments