We implement scheduling currently using the Quartz library

The QuartzComponent integrates with the Quartz open source scheduler library. This allows ServiceMix to trigger service invocations at timed intervals to perform periodic tasks.


Here's an example of configuring a quartz component. You can add as many triggers as you wish to the component, at different timing intervals.

<sm:activationSpec componentName="timer" service="my:timer" destinationService="my:receiver">
  <sm:component><bean class="org.apache.servicemix.components.quartz.QuartzComponent">
    <property name="triggers">
      <map>
        <entry>
          <key>
            <bean class="org.quartz.SimpleTrigger">
              <property name="repeatInterval" value="200"/>
              <property name="repeatCount" value="20"/>
            </bean>
          </key>
            <bean class="org.quartz.JobDetail">
              <property name="name" value="My Example Job"/>
              <property name="group" value="ServiceMix"/>
            </bean>
        </entry>
      </map>
    </property>
  </bean></sm:component>
</sm:activationSpec>

Notes:

  • The SimpleTrigger repeatCount value count is starting at zero, meaning repeatCount=0 triggers once, repeatCount=1 triggers twice etc. (Quartz v1.5)
  • Maybe properties like description or durability are interesting for you - for further details refer to the Quartz project JobDetail JavaDoc API.



A number of properties can be configured on the component:

  • marshaler: a class implementing the QuartzMarshaler interface which populates the JBI exchange. The default one will create something like:
    <timer>
      <name>My Example Job</name>
      <group>ServiceMix</group>
      <fullname>ServiceMix.My Example Job</fullname>
      <description/>
      <fireTime>Thu Oct 05 10:54:32 CEST 2006</fireTime>
    </timer>
    

    To get some hints on how to set up a marshaler, you may do such a Google Code search revealing how other marshalers are set up in static configuration files (like servicemix.xml). You will figure out that you have to create a silbing of <property name="triggers"> containing this code:

    <property name="marshaler">
            <bean class="org.apache.servicemix.components.quartz.DefaultQuartzMarshaler" />
    </property>
    
  • scheduler the Quartz scheduler to use. If not specified, the factory will be used to create it.