Scheduled tasks

From Resin 3.0

(Difference between revisions)
Jump to: navigation, search
(New page: <document> <header> <title>Scheduled Task</title> <type>contents</type> <description> <p>Resin's <resin:ScheduledTask> capability lets you schedule events using ...)
 
 
Line 1: Line 1:
 +
<document>
 +
  <header>
 +
    <title>Scheduled Task</title>
 +
    <type>contents</type>
 +
    <description>
 +
    <p>Resin's &lt;resin:ScheduledTask> capability lets you schedule
 +
      events using a flexible cron-style trigger.  The task can be
 +
      any <code>Runnable</code> bean, a method specified by EL, or
 +
      a URL.</p>
 +
    </description>
 +
  </header>
 +
 +
  <body>
 +
 +
<localtoc/>
 +
 +
<s1 title="&lt;resin:ScheduledTask>"> version="Resin 4.0.0">
 +
 +
<p>&lt;resin:ScheduledTask> schedules a job to be executed at specific times
 +
or after specific delays.  The times can be specified by a cron syntax or
 +
by a simple delay parameter.  The job can be either a <code>Runnable</code>
 +
bean, a method specified by an EL expression, or a URL.</p>
 +
 +
<p>When specified as an Java Injection bean, the bean task
 +
has full IoC capabilities,
 +
including injection, @TransactionAttribute aspects, interception and
 +
@Observes.</p>
 +
 +
<deftable title="&lt;resin:ScheduledTask> Attributes">
 +
<tr>
 +
  <th>Attribute</th>
 +
  <th>Description</th>
 +
</tr>
 +
<tr>
 +
  <td>class</td>
 +
  <td>the classname of the singleton bean to create</td>
 +
</tr>
 +
<tr>
 +
  <td>cron</td>
 +
  <td>a cron-style scheduling description</td>
 +
</tr>
 +
<tr>
 +
  <td>delay</td>
 +
  <td>a simple delay-based execution</td>
 +
</tr>
 +
<tr>
 +
  <td>init</td>
 +
  <td>IoC initialization for the bean</td>
 +
</tr>
 +
<tr>
 +
  <td>mbean-name</td>
 +
  <td>optional MBean name for JMX registration</td>
 +
</tr>
 +
<tr>
 +
  <td>method</td>
 +
  <td>EL expression for a method to be invoked as the task</td>
 +
</tr>
 +
<tr>
 +
  <td>name</td>
 +
  <td>optional IoC name for registering the task</td>
 +
</tr>
 +
<tr>
 +
  <td>period</td>
 +
  <td>how often the task should be invoked in simple mode</td>
 +
</tr>
 +
<tr>
 +
  <td>task</td>
 +
  <td>alternate task assignment for predefined beans</td>
 +
</tr>
 +
</deftable>
 +
 +
<s2 title="Java Injection bean job configuration">
 +
 +
<p>The most common and flexible job configuration uses standard IoC
 +
bean-style configuration.  The bean must implement <code>Runnable</code>.
 +
The <var>&lt;task></var> element specifies the bean, using standard
 +
Java injection syntax as described
 +
in <a href="candi.xtp">Java Injection</a> configuration.</p>
 +
 +
<example title="Example: 5min cron bean task">
 +
&lt;web-app xmlns="http://caucho.com/ns/resin"
 +
      xmlns:resin="urn:java:com.caucho.resin">
 +
 +
  &lt;resin:ScheduledTask>
 +
    &lt;cron>*/5&lt;/cron>
 +
    &lt;task>
 +
      &lt;qa:MyTask xmlns:qa="urn:java:com.caucho.resin"/>
 +
    &lt;/task>
 +
  &lt;/ScheduledTask>
 +
 +
&lt;/web-app>
 +
</example>
 +
 +
</s2>
 +
 +
<s2 title="task reference job configuration">
 +
 +
<p>The task bean can also be passed to the &lt;scheduled-task> using
 +
a Resin-IoC EL reference.  The name of the task bean would be defined
 +
previously, either in a &lt;bean> or &lt;component> or picked up by classpath
 +
scanning.  Like the bean-style job configuration, the reference bean must
 +
implement <code>Runnable</code>.</p>
 +
 +
<example title="Example: midnight cron bean task">
 +
&lt;web-app xmlns="http://caucho.com/ns/resin"
 +
        xmlns:resin="urn:java:com.caucho.resin">
 +
 +
  &lt;resin:ScheduledTask task="#{taskBean}">
 +
    &lt;cron>0 0 *&lt;/cron>
 +
  &lt;/resin:ScheduledTask>
 +
 +
&lt;/web-app>
 +
</example>
 +
 +
</s2>
 +
 +
<s2 title="method reference job configuration">
 +
 +
<p>&lt;scheduled-task> can execute a method on a defined bean as the
 +
scheduler's task.  The method is specified using EL reference syntax.
 +
At each trigger time, &lt;scheduled-task> will invoke the EL method
 +
expression.</p>
 +
 +
<p>In the following example, the task invokes <code>myMethod()</code>
 +
on the <var>myBean</var> singleton every 1 hour.</p>
 +
 +
<example title="Example: 1h period method task">
 +
&lt;web-app xmlns="http://caucho.com/ns/resin"
 +
  xmlns:resin="urn:java:com.caucho.resin"
 +
  xmlns:qa="urn:java:qa">
 +
 +
  &lt;qa:MyBean>
 +
    &lt;Named>myBean&lt;/Named>
 +
  &lt;/qa:MyBean>
 +
 +
  &lt;resin:ScheduledTask method="#{myBean.myMethod}">
 +
    &lt;resin:delay>10m&lt;/resin:delay>
 +
    &lt;resin:period>1h&lt;/resin:period>
 +
  &lt;/resin:ScheduledTask>
 +
 +
&lt;/web-app>
 +
</example>
 +
 +
</s2>
 +
 +
<s2 title="url job configuration">
 +
 +
<p>In a &lt;web-app>, the &lt;scheduled-task> can invoke a servlet URL
 +
at the trigger times.  The task uses the servlet <code>RequestDispatcher</code>
 +
and forwards to the specified URL.  The URL is relative to the &lt;web-app>
 +
which contains the &lt;scheduled-task.</p>
 +
 +
<example title="Example: sunday cron url task">
 +
&lt;web-app xmlns="http://caucho.com/ns/resin"
 +
  xmlns:resin="urn:java:com.caucho.config">
 +
 +
  &lt;resin:ScheduledTask url="/cron.php">
 +
    &lt;resin:cron>0 15 * * 0&lt;/resin:cron>
 +
  &lt;/resin:ScheduledTask>
 +
 +
&lt;/web-app>
 +
</example>
 +
 +
</s2>
 +
 +
<s2 title="cron trigger syntax">
 +
 +
<p>Some ascii art from the <a href="http://en.wikipedia.org/wiki/Crontab">wikipedia
 +
cron entry</a></p>
 +
 +
<def title="cron fields">
 +
# +---------------- minute (0 - 59)
 +
# |  +------------- hour (0 - 23)
 +
# |  |  +---------- day of month (1 - 31)
 +
# |  |  |  +------- month (1 - 12)
 +
# |  |  |  |  +---- day of week (0 - 6) (Sunday=0 or 7)
 +
# |  |  |  |  |
 +
  *  *  *  *  *
 +
</def>
 +
 +
<deftable title="cron patterns">
 +
<tr>
 +
  <th>Pattern</th>
 +
  <th>Description</th>
 +
</tr>
 +
<tr>
 +
  <td>*</td>
 +
  <td>matches all time periods</td>
 +
</tr>
 +
<tr>
 +
  <td>15</td>
 +
  <td>matches the specific time, e.g. 15 for minutes</td>
 +
</tr>
 +
<tr>
 +
  <td>15,45</td>
 +
  <td>matches a list of times, e.g. every :15 and :45</td>
 +
</tr>
 +
<tr>
 +
  <td>*/5</td>
 +
  <td>matches every <var>n</var> times, e.g. every 5 minutes</td>
 +
</tr>
 +
<tr>
 +
  <td>1-5</td>
 +
  <td>matches a range of times, e.g. mon, tue, wed, thu, fri (1-5)</td>
 +
</tr>
 +
</deftable>
 +
 +
<p>Each field specifies a range of times to be executed.  The patterns
 +
allowed are:</p>
 +
 +
<deftable title="example ranges">
 +
<tr>
 +
  <th>range</th>
 +
  <th>explanation (using minutes as example)</th>
 +
</tr>
 +
<tr>
 +
  <td>*</td>
 +
  <td>run every minute</td>
 +
</tr>
 +
<tr>
 +
  <td>*/5</td>
 +
  <td>run every 5 minutes</td>
 +
</tr>
 +
<tr>
 +
  <td>0,5,50</td>
 +
  <td>run at :00, :05, :50 every hour</td>
 +
</tr>
 +
  <tr><td>0-4</td>
 +
  <td>run at :00, :01, :02, :03, :04</td>
 +
</tr>
 +
<tr>
 +
  <td>0-30/2</td>
 +
  <td>run every 2 minutes for the first half hour</td>
 +
</tr>
 +
</deftable>
 +
 +
<p>The minutes field is always required, and the hours, days, and
 +
months fields are optional.</p>
 +
 +
<deftable title="example times">
 +
<tr>
 +
  <th>range</th>
 +
  <th>explanation</th>
 +
</tr>
 +
<tr>
 +
  <td>0 */3</td>
 +
  <td>run every 3 hours</td>
 +
</tr>
 +
<tr>
 +
  <td>15 2 *</td>
 +
  <td>run every day at 0215 local time</td>
 +
</tr>
 +
<tr>
 +
  <td>0 0 */3</td>
 +
  <td>run every third day at midnight</td>
 +
</tr>
 +
<tr>
 +
  <td>15 0 * * 6</td>
 +
  <td>run every Saturday at 0015</td>
 +
</tr>
 +
</deftable>
 +
 +
</s2>
 +
 +
</s1>
 +
 +
  </body>
 +
</document>
 +
 
<document>
 
<document>
 
   <header>
 
   <header>

Latest revision as of 08:39, 17 December 2009

<document>

 <header>
   <title>Scheduled Task</title>
   <type>contents</type>
   <description>

Resin's <resin:ScheduledTask> capability lets you schedule events using a flexible cron-style trigger. The task can be any Runnable bean, a method specified by EL, or a URL.

   </description>
 </header>
 <body>

<localtoc/>

<s1 title="<resin:ScheduledTask>"> version="Resin 4.0.0">

<resin:ScheduledTask> schedules a job to be executed at specific times or after specific delays. The times can be specified by a cron syntax or by a simple delay parameter. The job can be either a Runnable bean, a method specified by an EL expression, or a URL.

When specified as an Java Injection bean, the bean task has full IoC capabilities, including injection, @TransactionAttribute aspects, interception and @Observes.

<deftable title="<resin:ScheduledTask> Attributes"> <tr>

 <th>Attribute</th>
 <th>Description</th>

</tr> <tr>

 <td>class</td>
 <td>the classname of the singleton bean to create</td>

</tr> <tr>

 <td>cron</td>
 <td>a cron-style scheduling description</td>

</tr> <tr>

 <td>delay</td>
 <td>a simple delay-based execution</td>

</tr> <tr>

 <td>init</td>
 <td>IoC initialization for the bean</td>

</tr> <tr>

 <td>mbean-name</td>
 <td>optional MBean name for JMX registration</td>

</tr> <tr>

 <td>method</td>
 <td>EL expression for a method to be invoked as the task</td>

</tr> <tr>

 <td>name</td>
 <td>optional IoC name for registering the task</td>

</tr> <tr>

 <td>period</td>
 <td>how often the task should be invoked in simple mode</td>

</tr> <tr>

 <td>task</td>
 <td>alternate task assignment for predefined beans</td>

</tr> </deftable>

<s2 title="Java Injection bean job configuration">

The most common and flexible job configuration uses standard IoC bean-style configuration. The bean must implement Runnable. The <task> element specifies the bean, using standard Java injection syntax as described in <a href="candi.xtp">Java Injection</a> configuration.

<example title="Example: 5min cron bean task"> <web-app xmlns="http://caucho.com/ns/resin"

     xmlns:resin="urn:java:com.caucho.resin">
 <resin:ScheduledTask>
   <cron>*/5</cron>
   <task>
     <qa:MyTask xmlns:qa="urn:java:com.caucho.resin"/>
   </task>
 </ScheduledTask>

</web-app> </example>

</s2>

<s2 title="task reference job configuration">

The task bean can also be passed to the <scheduled-task> using a Resin-IoC EL reference. The name of the task bean would be defined previously, either in a <bean> or <component> or picked up by classpath scanning. Like the bean-style job configuration, the reference bean must implement Runnable.

<example title="Example: midnight cron bean task"> <web-app xmlns="http://caucho.com/ns/resin"

        xmlns:resin="urn:java:com.caucho.resin">
 <resin:ScheduledTask task="#{taskBean}">
   <cron>0 0 *</cron>
 </resin:ScheduledTask>

</web-app> </example>

</s2>

<s2 title="method reference job configuration">

<scheduled-task> can execute a method on a defined bean as the scheduler's task. The method is specified using EL reference syntax. At each trigger time, <scheduled-task> will invoke the EL method expression.

In the following example, the task invokes myMethod() on the myBean singleton every 1 hour.

<example title="Example: 1h period method task"> <web-app xmlns="http://caucho.com/ns/resin"

 xmlns:resin="urn:java:com.caucho.resin"
 xmlns:qa="urn:java:qa">
 <qa:MyBean>
   <Named>myBean</Named>
 </qa:MyBean>
 <resin:ScheduledTask method="#{myBean.myMethod}">
   <resin:delay>10m</resin:delay>
   <resin:period>1h</resin:period>
 </resin:ScheduledTask>

</web-app> </example>

</s2>

<s2 title="url job configuration">

In a <web-app>, the <scheduled-task> can invoke a servlet URL at the trigger times. The task uses the servlet RequestDispatcher and forwards to the specified URL. The URL is relative to the <web-app> which contains the <scheduled-task.

<example title="Example: sunday cron url task"> <web-app xmlns="http://caucho.com/ns/resin"

 xmlns:resin="urn:java:com.caucho.config">
 <resin:ScheduledTask url="/cron.php">
   <resin:cron>0 15 * * 0</resin:cron>
 </resin:ScheduledTask>

</web-app> </example>

</s2>

<s2 title="cron trigger syntax">

Some ascii art from the <a href="http://en.wikipedia.org/wiki/Crontab">wikipedia cron entry</a>

<def title="cron fields">

  1. +---------------- minute (0 - 59)
  2. | +------------- hour (0 - 23)
  3. | | +---------- day of month (1 - 31)
  4. | | | +------- month (1 - 12)
  5. | | | | +---- day of week (0 - 6) (Sunday=0 or 7)
  6. | | | | |
 *  *  *  *  *

</def>

<deftable title="cron patterns"> <tr>

 <th>Pattern</th>
 <th>Description</th>

</tr> <tr>

 <td>*</td>
 <td>matches all time periods</td>

</tr> <tr>

 <td>15</td>
 <td>matches the specific time, e.g. 15 for minutes</td>

</tr> <tr>

 <td>15,45</td>
 <td>matches a list of times, e.g. every :15 and :45</td>

</tr> <tr>

 <td>*/5</td>
 <td>matches every n times, e.g. every 5 minutes</td>

</tr> <tr>

 <td>1-5</td>
 <td>matches a range of times, e.g. mon, tue, wed, thu, fri (1-5)</td>

</tr> </deftable>

Each field specifies a range of times to be executed. The patterns allowed are:

<deftable title="example ranges"> <tr>

 <th>range</th>
 <th>explanation (using minutes as example)</th>

</tr> <tr>

 <td>*</td>
 <td>run every minute</td>

</tr> <tr>

 <td>*/5</td>
 <td>run every 5 minutes</td>

</tr> <tr>

 <td>0,5,50</td>
 <td>run at :00, :05, :50 every hour</td>

</tr>

 <tr><td>0-4</td>
 <td>run at :00, :01, :02, :03, :04</td>

</tr> <tr>

 <td>0-30/2</td>
 <td>run every 2 minutes for the first half hour</td>

</tr> </deftable>

The minutes field is always required, and the hours, days, and months fields are optional.

<deftable title="example times"> <tr>

 <th>range</th>
 <th>explanation</th>

</tr> <tr>

 <td>0 */3</td>
 <td>run every 3 hours</td>

</tr> <tr>

 <td>15 2 *</td>
 <td>run every day at 0215 local time</td>

</tr> <tr>

 <td>0 0 */3</td>
 <td>run every third day at midnight</td>

</tr> <tr>

 <td>15 0 * * 6</td>
 <td>run every Saturday at 0015</td>

</tr> </deftable>

</s2>

</s1>

 </body>

</document>

<document>

 <header>
   <title>Scheduled Task</title>
   <type>contents</type>
   <description>

Resin's <resin:ScheduledTask> capability lets you schedule events using a flexible cron-style trigger. The task can be any Runnable bean, a method specified by EL, or a URL.

   </description>
 </header>
 <body>

<localtoc/>

<s1 title="<resin:ScheduledTask>"> version="Resin 4.0.0">

<resin:ScheduledTask> schedules a job to be executed at specific times or after specific delays. The times can be specified by a cron syntax or by a simple delay parameter. The job can be either a Runnable bean, a method specified by an EL expression, or a URL.

When specified as an Java Injection bean, the bean task has full IoC capabilities, including injection, @TransactionAttribute aspects, interception and @Observes.

<deftable title="<resin:ScheduledTask> Attributes"> <tr>

 <th>Attribute</th>
 <th>Description</th>

</tr> <tr>

 <td>class</td>
 <td>the classname of the singleton bean to create</td>

</tr> <tr>

 <td>cron</td>
 <td>a cron-style scheduling description</td>

</tr> <tr>

 <td>delay</td>
 <td>a simple delay-based execution</td>

</tr> <tr>

 <td>init</td>
 <td>IoC initialization for the bean</td>

</tr> <tr>

 <td>mbean-name</td>
 <td>optional MBean name for JMX registration</td>

</tr> <tr>

 <td>method</td>
 <td>EL expression for a method to be invoked as the task</td>

</tr> <tr>

 <td>name</td>
 <td>optional IoC name for registering the task</td>

</tr> <tr>

 <td>period</td>
 <td>how often the task should be invoked in simple mode</td>

</tr> <tr>

 <td>task</td>
 <td>alternate task assignment for predefined beans</td>

</tr> </deftable>

<s2 title="Java Injection bean job configuration">

The most common and flexible job configuration uses standard IoC bean-style configuration. The bean must implement Runnable. The <task> element specifies the bean, using standard Java injection syntax as described in <a href="candi.xtp">Java Injection</a> configuration.

<example title="Example: 5min cron bean task"> <web-app xmlns="http://caucho.com/ns/resin"

     xmlns:resin="urn:java:com.caucho.resin">
 <resin:ScheduledTask>
   <cron>*/5</cron>
   <task>
     <qa:MyTask xmlns:qa="urn:java:com.caucho.resin"/>
   </task>
 </ScheduledTask>

</web-app> </example>

</s2>

<s2 title="task reference job configuration">

The task bean can also be passed to the <scheduled-task> using a Resin-IoC EL reference. The name of the task bean would be defined previously, either in a <bean> or <component> or picked up by classpath scanning. Like the bean-style job configuration, the reference bean must implement Runnable.

<example title="Example: midnight cron bean task"> <web-app xmlns="http://caucho.com/ns/resin"

        xmlns:resin="urn:java:com.caucho.resin">
 <resin:ScheduledTask task="#{taskBean}">
   <cron>0 0 *</cron>
 </resin:ScheduledTask>

</web-app> </example>

</s2>

<s2 title="method reference job configuration">

<scheduled-task> can execute a method on a defined bean as the scheduler's task. The method is specified using EL reference syntax. At each trigger time, <scheduled-task> will invoke the EL method expression.

In the following example, the task invokes myMethod() on the myBean singleton every 1 hour.

<example title="Example: 1h period method task"> <web-app xmlns="http://caucho.com/ns/resin"

 xmlns:resin="urn:java:com.caucho.resin"
 xmlns:qa="urn:java:qa">
 <qa:MyBean>
   <Named>myBean</Named>
 </qa:MyBean>
 <resin:ScheduledTask method="#{myBean.myMethod}">
   <resin:delay>10m</resin:delay>
   <resin:period>1h</resin:period>
 </resin:ScheduledTask>

</web-app> </example>

</s2>

<s2 title="url job configuration">

In a <web-app>, the <scheduled-task> can invoke a servlet URL at the trigger times. The task uses the servlet RequestDispatcher and forwards to the specified URL. The URL is relative to the <web-app> which contains the <scheduled-task.

<example title="Example: sunday cron url task"> <web-app xmlns="http://caucho.com/ns/resin"

 xmlns:resin="urn:java:com.caucho.config">
 <resin:ScheduledTask url="/cron.php">
   <resin:cron>0 15 * * 0</resin:cron>
 </resin:ScheduledTask>

</web-app> </example>

</s2>

<s2 title="cron trigger syntax">

Some ascii art from the <a href="http://en.wikipedia.org/wiki/Crontab">wikipedia cron entry</a>

<def title="cron fields">

  1. +---------------- minute (0 - 59)
  2. | +------------- hour (0 - 23)
  3. | | +---------- day of month (1 - 31)
  4. | | | +------- month (1 - 12)
  5. | | | | +---- day of week (0 - 6) (Sunday=0 or 7)
  6. | | | | |
 *  *  *  *  *

</def>

<deftable title="cron patterns"> <tr>

 <th>Pattern</th>
 <th>Description</th>

</tr> <tr>

 <td>*</td>
 <td>matches all time periods</td>

</tr> <tr>

 <td>15</td>
 <td>matches the specific time, e.g. 15 for minutes</td>

</tr> <tr>

 <td>15,45</td>
 <td>matches a list of times, e.g. every :15 and :45</td>

</tr> <tr>

 <td>*/5</td>
 <td>matches every n times, e.g. every 5 minutes</td>

</tr> <tr>

 <td>1-5</td>
 <td>matches a range of times, e.g. mon, tue, wed, thu, fri (1-5)</td>

</tr> </deftable>

Each field specifies a range of times to be executed. The patterns allowed are:

<deftable title="example ranges"> <tr>

 <th>range</th>
 <th>explanation (using minutes as example)</th>

</tr> <tr>

 <td>*</td>
 <td>run every minute</td>

</tr> <tr>

 <td>*/5</td>
 <td>run every 5 minutes</td>

</tr> <tr>

 <td>0,5,50</td>
 <td>run at :00, :05, :50 every hour</td>

</tr>

 <tr><td>0-4</td>
 <td>run at :00, :01, :02, :03, :04</td>

</tr> <tr>

 <td>0-30/2</td>
 <td>run every 2 minutes for the first half hour</td>

</tr> </deftable>

The minutes field is always required, and the hours, days, and months fields are optional.

<deftable title="example times"> <tr>

 <th>range</th>
 <th>explanation</th>

</tr> <tr>

 <td>0 */3</td>
 <td>run every 3 hours</td>

</tr> <tr>

 <td>15 2 *</td>
 <td>run every day at 0215 local time</td>

</tr> <tr>

 <td>0 0 */3</td>
 <td>run every third day at midnight</td>

</tr> <tr>

 <td>15 0 * * 6</td>
 <td>run every Saturday at 0015</td>

</tr> </deftable>

</s2>

</s1>

 </body>

</document>

Personal tools