Class JobsScheduler

  • All Implemented Interfaces:
    ISubsystem, IJobsScheduler, java.lang.Runnable

    public class JobsScheduler
    extends java.lang.Object
    implements java.lang.Runnable, IJobsScheduler
    This is a daemon thread that handles scheduled jobs like cron would do with different jobs. This daemon wakes up at a pre-configured interval to see if there is any job to be done, if so, a thread is created to execute the job(s).

    The interval jobsScheduler.interval in the configuration is specified as number of minutes. If not set, the default is 1 minute. Note that the cron specification for each job CAN NOT be finer than the granularity of the Scheduler daemon interval. For example, if the daemon interval is set to 5 minute, a job cron for every minute at 7am on each Tuesday (e.g. * 7 * * 2) will result in the execution of the job thread only once every 5 minutes during that hour. The inteval value is recommended at 1 minute, setting it otherwise has the potential of forever missing the beat. Use with caution.

    Version:
    $Revision$, $Date$
    Author:
    cfu
    See Also:
    JobCron
    • Field Detail

      • logger

        public static org.slf4j.Logger logger
      • mId

        protected java.lang.String mId
        Scheduler thread doing job scheduling
      • mScheduleThread

        protected java.lang.Thread mScheduleThread
      • mJobPlugins

        public java.util.Hashtable<java.lang.String,​JobPlugin> mJobPlugins
      • mJobs

        public java.util.Hashtable<java.lang.String,​IJob> mJobs
    • Method Detail

      • init

        public void init​(IConfigStore config)
                  throws EBaseException,
                         EJobsException
        read from the config file all implementations of Jobs, register and initialize them

        the config params have the following formats: jobScheduler.impl.[implementation name].class=[package name] jobScheduler.job.[job name].pluginName=[implementation name] jobScheduler.job.[job name].cron=[crontab format] jobScheduler.job.[job name].[any job specific params]=[values]

        Specified by:
        init in interface ISubsystem
        Parameters:
        config - jobsScheduler configStore
        Throws:
        EBaseException - failed to initialize
        EJobsException
      • getPlugins

        public java.util.Hashtable<java.lang.String,​JobPlugin> getPlugins()
        Description copied from interface: IJobsScheduler
        Retrieves all the job implementations.
        Specified by:
        getPlugins in interface IJobsScheduler
        Returns:
        a Hashtable of available job plugin implementations
      • getInstances

        public java.util.Hashtable<java.lang.String,​IJob> getInstances()
        Description copied from interface: IJobsScheduler
        Retrieves all the job instances.
        Specified by:
        getInstances in interface IJobsScheduler
        Returns:
        a Hashtable of job instances
      • run

        public void run()
        when wake up: . execute the scheduled job(s) * if job still running from previous interval, skip it . figure out when is the next wakeup time (every interval). If current wakup time runs over the interval, skip the missed interval(s) . sleep till the next wakeup time
        Specified by:
        run in interface java.lang.Runnable
      • createJobCron

        public IJobCron createJobCron​(java.lang.String cs)
                               throws EBaseException
        Description copied from interface: IJobsScheduler
        Creates a job cron. Each job is associated with a "cron" which specifies the rule of frequency that this job should be executed (e.g. every Sunday at midnight). This method is called by each job at initialization time.
        Specified by:
        createJobCron in interface IJobsScheduler
        Parameters:
        cs - the string that represents the cron. See IJobCron for detail of the format.
        Returns:
        IJobCron an IJobCron
        Throws:
        EBaseException - when the cron string, cs, can not be parsed correctly
      • isShowTime

        protected boolean isShowTime​(IJob job,
                                     java.util.Calendar now)
        Is it time for the job?
      • getId

        public java.lang.String getId()
        Retrieves id (name) of this subsystem.
        Specified by:
        getId in interface ISubsystem
        Returns:
        name of the Jobs Scheduler subsystem
      • setId

        public void setId​(java.lang.String id)
                   throws EBaseException
        Sets id string to this subsystem.

        Use with caution. Should not do it when sharing with others

        Specified by:
        setId in interface ISubsystem
        Parameters:
        id - name to be applied to an Jobs Scheduler subsystem
        Throws:
        EBaseException - failed to set id
      • startDaemon

        public void startDaemon()
        creates and starts the daemon thread
        Specified by:
        startDaemon in interface IJobsScheduler
      • shutdown

        public void shutdown()
        shuts down Jobs one by one.

        Specified by:
        shutdown in interface ISubsystem
      • getConfigStore

        public IConfigStore getConfigStore()
        Returns the root configuration storage of this system.

        Specified by:
        getConfigStore in interface ISubsystem
        Returns:
        configuration store of this subsystem
      • getConfigParams

        public java.lang.String[] getConfigParams​(java.lang.String implName)
                                           throws EJobsException
        Gets configuration parameters for the given job plugin.
        Specified by:
        getConfigParams in interface IJobsScheduler
        Parameters:
        implName - Name of the job plugin.
        Returns:
        Hashtable of required parameters.
        Throws:
        EJobsException - when job plugin implementation can not be found, instantiation is impossible, permission problem with the class.
      • setInterval

        public void setInterval​(int minutes)
        Description copied from interface: IJobsScheduler
        Sets daemon's wakeup interval.
        Specified by:
        setInterval in interface IJobsScheduler
        Parameters:
        minutes - time in minutes that is to be the frequency of JobsScheduler wakeup call.
      • log

        public void log​(int level,
                        java.lang.String msg)
        Description copied from interface: IJobsScheduler
        Writes a message to the system log.
        Specified by:
        log in interface IJobsScheduler
        Parameters:
        level - an integer representing the log message level. Depending on the configuration set by the administrator, this value is a determining factor for whether this message will be actually logged or not. The lower the level, the higher the priority, and the higher chance it will be logged.
        msg - the message to be written. Ideally should call CMS.getLogMessage() to get the localizable message from the log properties file.
      • getJobPlugins

        public java.util.Hashtable<java.lang.String,​JobPlugin> getJobPlugins()