Class JobsScheduler

java.lang.Object
com.netscape.certsrv.base.Subsystem
com.netscape.cmscore.jobs.JobsScheduler
All Implemented Interfaces:
Runnable

public class JobsScheduler extends Subsystem implements Runnable
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:
  • Field Details

    • logger

      public static org.slf4j.Logger logger
    • ID

      public static final String ID
      The ID of this component
      See Also:
    • PROP_ENABLED

      public static final 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:
    • PROP_INTERVAL

      public static final 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:
    • PROP_CLASS

      public static final 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:
    • PROP_JOB

      public static final 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:
    • PROP_IMPL

      public static final 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:
    • PROP_PLUGIN

      public static final 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:
    • MINUTE_MILLI

      protected static final long MINUTE_MILLI
      See Also:
    • DELIM

      protected static final String DELIM
      See Also:
    • mId

      protected String mId
      Scheduler thread doing job scheduling
    • mScheduleThread

      protected Thread mScheduleThread
    • mJobPlugins

      public Hashtable<String,JobPlugin> mJobPlugins
    • mJobs

      public Hashtable<String,Job> mJobs
  • Constructor Details

    • JobsScheduler

      public JobsScheduler()
  • Method Details

    • init

      public void init(JobsSchedulerConfig config) throws Exception
      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]

      Parameters:
      config - Subsystem configuration
      Throws:
      Exception - Unable to initialize subsystem
    • getPlugins

      public Hashtable<String,JobPlugin> getPlugins()
      Retrieves all the job implementations.
      Returns:
      a Hashtable of available job plugin implementations
    • getInstances

      public Hashtable<String,Job> getInstances()
      Retrieves all the job instances.
      Returns:
      a Hashtable of job instances
    • getJob

      public Job getJob(String id)
    • 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 Runnable
    • startJob

      public void startJob(String id)
    • createJobCron

      public JobCron createJobCron(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 JobCron for detail of the format.
      Returns:
      JobCron an JobCron
      Throws:
      EBaseException - when the cron string, cs, can not be parsed correctly
    • isShowTime

      protected boolean isShowTime(Job job, Calendar now)
      Is it time for the job?
    • getId

      public String getId()
      Retrieves id (name) of this subsystem.
      Overrides:
      getId in class Subsystem
      Returns:
      name of the Jobs Scheduler subsystem
    • setId

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

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

      Overrides:
      setId in class Subsystem
      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.
    • startup

      public void startup() throws EBaseException
      registers the administration servlet with the administration subsystem.
      Overrides:
      startup in class Subsystem
      Throws:
      EBaseException - failed to start up
    • shutdown

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

      Overrides:
      shutdown in class Subsystem
    • getConfigStore

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

      Overrides:
      getConfigStore in class Subsystem
      Returns:
      configuration store of this subsystem
    • getConfigParams

      public String[] getConfigParams(String implName) throws 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:
      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, 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 Hashtable<String,JobPlugin> getJobPlugins()