Class JobsScheduler

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

    public class JobsScheduler
    extends java.lang.Object
    implements java.lang.Runnable, ISubsystem
    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 Summary

      Fields 
      Modifier and Type Field Description
      protected static java.lang.String DELIM  
      static java.lang.String ID
      The ID of this component
      static org.slf4j.Logger logger  
      protected java.lang.String mId
      Scheduler thread doing job scheduling
      protected static long MINUTE_MILLI  
      java.util.Hashtable<java.lang.String,​com.netscape.certsrv.jobs.JobPlugin> mJobPlugins  
      java.util.Hashtable<java.lang.String,​com.netscape.certsrv.jobs.IJob> mJobs  
      protected java.lang.Thread mScheduleThread  
      static java.lang.String PROP_CLASS
      constant that represents the configuration parameter "class" for this component in CMS.cfg.
      static java.lang.String PROP_ENABLED
      constant that represents the configuration parameter "enabled" for this component in CMS.cfg.
      static java.lang.String PROP_IMPL
      constant that represents the configuration parameter "impl" for this component in CMS.cfg.
      static java.lang.String PROP_INTERVAL
      constant that represents the configuration parameter "interval" for this component in CMS.cfg.
      static java.lang.String PROP_JOB
      constant that represents the configuration parameter "job" for this component in CMS.cfg.
      static java.lang.String PROP_PLUGIN
      constant that represents the configuration parameter "pluginName" for this component in CMS.cfg.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      com.netscape.certsrv.jobs.IJobCron createJobCron​(java.lang.String cs)
      Creates a job cron.
      java.lang.String[] getConfigParams​(java.lang.String implName)
      Retrieves the configuration parameters of the given implementation.
      IConfigStore getConfigStore()
      Returns the root configuration storage of this system.
      java.lang.String getId()
      Retrieves id (name) of this subsystem.
      static JobsScheduler getInstance()  
      java.util.Hashtable<java.lang.String,​com.netscape.certsrv.jobs.IJob> getInstances()
      Retrieves all the job instances.
      java.util.Hashtable<java.lang.String,​com.netscape.certsrv.jobs.JobPlugin> getJobPlugins()  
      java.util.Hashtable<java.lang.String,​com.netscape.certsrv.jobs.JobPlugin> getPlugins()
      Retrieves all the job implementations.
      void init​(IConfigStore config)
      read from the config file all implementations of Jobs, register and initialize them
      protected boolean isShowTime​(com.netscape.certsrv.jobs.IJob job, java.util.Calendar now)
      Is it time for the job?
      void log​(int level, java.lang.String msg)
      Writes a message to the system log.
      void run()
      when wake up: .
      void setId​(java.lang.String id)
      Sets id string to this subsystem.
      void setInterval​(int minutes)
      Sets daemon's wakeup interval.
      void shutdown()
      shuts down Jobs one by one.
      void startDaemon()
      Starts up the JobsScheduler daemon.
      void startup()
      registers the administration servlet with the administration subsystem.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • logger

        public static org.slf4j.Logger logger
      • PROP_ENABLED

        public static final java.lang.String PROP_ENABLED
        constant that represents the configuration parameter "enabled" for this component in CMS.cfg. The value of which tells CMS whether the JobsScheduler is enabled or not
        See Also:
        Constant Field Values
      • PROP_INTERVAL

        public static final java.lang.String PROP_INTERVAL
        constant that represents the configuration parameter "interval" for this component in CMS.cfg. The value of which tells CMS the interval that the JobsScheduler thread should wake up and look for jobs to execute
        See Also:
        Constant Field Values
      • PROP_CLASS

        public static final java.lang.String PROP_CLASS
        constant that represents the configuration parameter "class" for this component in CMS.cfg. The values of which are the actual implementation classes
        See Also:
        Constant Field Values
      • PROP_JOB

        public static final java.lang.String PROP_JOB
        constant that represents the configuration parameter "job" for this component in CMS.cfg. The values of which gives configuration information specific to one single job instance. There may be multiple jobs served by the jobsScheduler
        See Also:
        Constant Field Values
      • PROP_IMPL

        public static final java.lang.String PROP_IMPL
        constant that represents the configuration parameter "impl" for this component in CMS.cfg. The values of which are actual plugin implementation(s)
        See Also:
        Constant Field Values
      • PROP_PLUGIN

        public static final java.lang.String PROP_PLUGIN
        constant that represents the configuration parameter "pluginName" for this component in CMS.cfg. The value of which gives the pluginName for the job it associates with
        See Also:
        Constant Field Values
      • 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,​com.netscape.certsrv.jobs.JobPlugin> mJobPlugins
      • mJobs

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

      • init

        public void init​(IConfigStore config)
                  throws EBaseException,
                         com.netscape.certsrv.jobs.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
        com.netscape.certsrv.jobs.EJobsException
      • getPlugins

        public java.util.Hashtable<java.lang.String,​com.netscape.certsrv.jobs.JobPlugin> getPlugins()
        Retrieves all the job implementations.
        Returns:
        a Hashtable of available job plugin implementations
      • getInstances

        public java.util.Hashtable<java.lang.String,​com.netscape.certsrv.jobs.IJob> getInstances()
        Retrieves all the job instances.
        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 com.netscape.certsrv.jobs.IJobCron createJobCron​(java.lang.String cs)
                                                         throws EBaseException
        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.
        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​(com.netscape.certsrv.jobs.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()
        Starts up the JobsScheduler daemon. Usually called from the initialization method when it's successfully initialized.
      • 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 com.netscape.certsrv.jobs.EJobsException
        Retrieves the configuration parameters of the given implementation. It is used to return to the Console for configuration
        Parameters:
        implName - the pulubin implementation name
        Returns:
        a String array of required configuration parameters of the given implementation.
        Throws:
        com.netscape.certsrv.jobs.EJobsException - when job plugin implementation can not be found, instantiation is impossible, permission problem with the class.
      • setInterval

        public void setInterval​(int minutes)
        Sets daemon's wakeup interval.
        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)
        Writes a message to the system log.
        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,​com.netscape.certsrv.jobs.JobPlugin> getJobPlugins()