Class JobDef

All Implemented Interfaces:
HasTransactionAttribute, IConfigurable, IConfigurationAware, INamedObject, IScopeProvider, IJob, org.springframework.beans.factory.Aware, org.springframework.context.ApplicationContextAware
Direct Known Subclasses:
CheckReloadJob, CleanupDatabaseJob, CleanupFileSystemJob, ExecuteQueryJob, IbisActionJob, Job, LoadDatabaseSchedulesJob, RecoverAdaptersJob, SendMessageJob

public abstract class JobDef extends TransactionAttributes implements IConfigurationAware, IJob
Definition / configuration of scheduler jobs. Specified in the Configuration.xml by a <job> inside a <scheduler>. The scheduler element must be a direct child of configuration, not of adapter.
All registered jobs are displayed in the IbisConsole under 'Scheduler'.


Operation of scheduling:

  • at configuration time Configuration.registerScheduledJob() is called;
  • this calls SchedulerHelper.scheduleJob();
  • this creates a Quartz JobDetail object, and copies adapterName, receiverName, function and a reference to the configuration to jobdetail's datamap;
  • it sets the class to execute to AdapterJob
  • this job is scheduled using the cron expression

CronExpressions

A "Cron-Expression" is a string comprised of 6 or 7 fields separated by white space. The 6 mandatory and 1 optional fields are as follows:

Field Name   Allowed Values   Allowed Special Characters
Seconds   0-59   , - * /
Minutes   0-59   , - * /
Hours   0-23   , - * /
Day-of-month   1-31   , - * ? / L C
Month   1-12 or JAN-DEC   , - * /
Day-of-Week   1-7 or SUN-SAT   , - * ? / L C #
Year (Optional)   empty, 1970-2099   , - * /

The '*' character is used to specify all values. For example, "*" in the minute field means "every minute".

The '?' character is allowed for the day-of-month and day-of-week fields. It is used to specify 'no specific value'. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification.

The '-' character is used to specify ranges For example "10-12" in the hour field means "the hours 10, 11 and 12".

The ',' character is used to specify additional values. For example "MON,WED,FRI" in the day-of-week field means "the days Monday, Wednesday, and Friday".

The '/' character is used to specify increments. For example "0/15" in the seconds field means "the seconds 0, 15, 30, and 45". And "5/15" in the seconds field means "the seconds 5, 20, 35, and 50". You can also specify '/' after the '*' character - in this case '*' is equivalent to having '0' before the '/'.

The 'L' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "last", but it has different meaning in each of the two fields. For example, the value "L" in the day-of-month field means "the last day of the month" - day 31 for January, day 28 for February on non-leap years. If used in the day-of-week field by itself, it simply means "7" or "SAT". But if used in the day-of-week field after another value, it means "the last xxx day of the month" - for example "6L" means "the last friday of the month". When using the 'L' option, it is important not to specify lists, or ranges of values, as you'll get confusing results.

The '#' character is allowed for the day-of-week field. This character is used to specify "the nth" XX day of the month. For example, the value of "6#3" in the day-of-week field means the third Friday of the month (day 6 = Friday and "#3" = the 3rd one in the month). Other examples: "2#1" = the first Monday of the month and "4#5" = the fifth Wednesday of the month. Note that if you specify "#5" and there is not 5 of the given day-of-week in the month, then no firing will occur that month.

The 'C' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "calendar". This means values are calculated against the associated calendar, if any. If no calendar is associated, then it is equivalent to having an all-inclusive calendar. A value of "5C" in the day-of-month field means "the first day included by the calendar on or after the 5th". A value of "1C" in the day-of-week field means "the first day included by the calendar on or after sunday".

The legal characters and the names of months and days of the week are not case sensitive.

Here are some full examples:

Expression   Meaning
"0 0 12 * * ?"   Fire at 12pm (noon) every day
"0 15 10 ? * *"   Fire at 10:15am every day
"0 15 10 * * ?"   Fire at 10:15am every day
"0 15 10 * * ? *"   Fire at 10:15am every day
"0 15 10 * * ? 2005"   Fire at 10:15am every day during the year 2005
"0 * 14 * * ?"   Fire every minute starting at 2pm and ending at 2:59pm, every day
"0 0/5 14 * * ?"   Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day
"0 0/5 14,18 * * ?"   Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day
"0 0-5 14 * * ?"   Fire every minute starting at 2pm and ending at 2:05pm, every day
"0 10,44 14 ? 3 WED"   Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.
"0 15 10 ? * MON-FRI"   Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday
"0 15 10 15 * ?"   Fire at 10:15am on the 15th day of every month
"0 15 10 L * ?"   Fire at 10:15am on the last day of every month
"0 15 10 ? * 6L"   Fire at 10:15am on the last Friday of every month
"0 15 10 ? * 6L"   Fire at 10:15am on the last Friday of every month
"0 15 10 ? * 6L 2002-2005"   Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005
"0 15 10 ? * 6#3"   Fire at 10:15am on the third Friday of every month

Pay attention to the effects of '?' and '*' in the day-of-week and day-of-month fields!

NOTES:

  • Support for the features described for the 'C' character is not complete.
  • Support for specifying both a day-of-week and a day-of-month value is not complete (you'll need to use the '?' character in on of these fields).
  • Be careful when setting fire times between mid-night and 1:00 AM - "daylight savings" can cause a skip or a repeat depending on whether the time moves back or jumps forward.

  • Constructor Details

    • JobDef

      public JobDef()
  • Method Details

    • configure

      public void configure() throws ConfigurationException
      Specified by:
      configure in interface IConfigurable
      Overrides:
      configure in class TransactionAttributes
      Throws:
      ConfigurationException
    • getJobDetail

      public org.quartz.JobDetail getJobDetail()
      Specified by:
      getJobDetail in interface IJob
    • incrementCountThreads

      public boolean incrementCountThreads()
    • decrementCountThreads

      public void decrementCountThreads()
    • beforeExecuteJob

      public boolean beforeExecuteJob()
      Called before executeJob to prepare resources for executeJob method. Returns false if job does not need to run
    • executeJob

      public final void executeJob()
      Called from ConfiguredJob which should trigger this job definition.
      Specified by:
      executeJob in interface IJob
    • getIbisManager

      protected IbisManager getIbisManager()
    • getLogPrefix

      protected String getLogPrefix()
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • setJobGroup

      public void setJobGroup(String jobGroup)
    • setName

      public void setName(String name)
      Name of the job
      Specified by:
      setName in interface INamedObject
    • setDescription

      public void setDescription(String description)
      Description of the job
    • setCronExpression

      public void setCronExpression(String cronExpression)
      Description copied from interface: IJob
      CRON expression that determines the frequency of execution. Can not be used in combination with Interval.
      Specified by:
      setCronExpression in interface IJob
    • setInterval

      public void setInterval(long interval)
      Description copied from interface: IJob
      Triggers the Job at the specified number of milliseconds. Keep cronExpression empty in order to use interval. Value 0 may be used to run once at startup of the application. A value of 0 in combination with function 'sendMessage' will set dependencyTimeout on the IbisLocalSender to -1 to keep waiting indefinitely instead of 60 seconds for the adapter to start.
      Specified by:
      setInterval in interface IJob
    • setLocker

      public void setLocker(Locker locker)
      Description copied from interface: IJob
      Optional element to avoid parallel execution of the Job, by multiple threads or servers. The Job is NOT executed when the lock cannot be obtained! In case another thread, potentially on another server, holds the lock and does not release it in a timely manner, it will not trigger the job.
      Specified by:
      setLocker in interface IJob
    • setNumThreads

      public void setNumThreads(int newNumThreads)
      Number of threads that may execute concurrently
      Default value
      1
    • getMessageKeeper

      public MessageKeeper getMessageKeeper()
      Specified by:
      getMessageKeeper in interface IJob
    • setMessageKeeperSize

      public void setMessageKeeperSize(int size)
      Number of messages displayed in ibisconsole
      Default value
      10
    • getConfigurationClassLoader

      public ClassLoader getConfigurationClassLoader()
      Description copied from interface: IScopeProvider
      This ClassLoader is set upon creation of the object, used to retrieve resources configured by the Ibis application.
      Specified by:
      getConfigurationClassLoader in interface IScopeProvider
      Returns:
      returns the ClassLoader created by the ClassLoaderManager.
    • getApplicationContext

      public org.springframework.context.ApplicationContext getApplicationContext()
      Specified by:
      getApplicationContext in interface IConfigurationAware
    • setApplicationContext

      public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
      Specified by:
      setApplicationContext in interface org.springframework.context.ApplicationContextAware
    • setConfigurationMetrics

      public void setConfigurationMetrics(MetricsInitializer configurationMetrics)
    • isConfigured

      public boolean isConfigured()
      Description copied from interface: IJob
      Only register (and trigger) Jobs that have been successfully configured.
      Specified by:
      isConfigured in interface IJob
    • getName

      public String getName()
      Description copied from interface: IJob
      The name of the Job, used in combination with JobGroup to create a unique key.
      Specified by:
      getName in interface IConfigurationAware
      Specified by:
      getName in interface IJob
      Specified by:
      getName in interface INamedObject
    • getDescription

      public String getDescription()
    • getJobGroup

      public String getJobGroup()
      Description copied from interface: IJob
      The group of the Job, used in combination with Name to create a unique key.
      Specified by:
      getJobGroup in interface IJob
    • getCronExpression

      public String getCronExpression()
      Specified by:
      getCronExpression in interface IJob
    • getInterval

      public long getInterval()
      Specified by:
      getInterval in interface IJob
    • getLocker

      public Locker getLocker()
      Specified by:
      getLocker in interface IJob
    • getNumThreads

      public int getNumThreads()