FeaturesThe Quartz Service-Engine schedules jobs to trigger services invocations within the JBI bus. The jobs are based on time policies. This component only acts as a service consumer and does not act as a service provider. This component relies on the Quartz open source project. |
Table of contents Contributors
No contributors found for: authors on selected page(s)
|
Recommended usage
This component should be used to plan and launch service execution at determined moments.
As an example, you can use it to execute a given service every day at noon, or execute another service every 3 hours...
Each service-unit consumes one service, i.e. manages the invocation of one JBI service based a time (CRON) expression.
Scheduling service invocations (Consumes mode)
General information
Since this component only supports consuming configurations, no WSDL is required.
However, the messages sent by this component must respect the WSDL of the invoked service.
One way to ensure that is to generate the message's XML skeleton from the WSDL of the target service.
A tool like SoapUI works well for this kind of task.
The messages sent by this component are sent with the InOnly pattern.
It is not possible to add file attachments in the sent messages. These messages only have an XML payload.
This message is sent every time the time expression is reached.
Time expressions are CRON expressions. The syntax is explained on the website of the Quartz project.
Below are given some sample CRON expressions and their meaning.
| CRON expression | Meaning |
|---|---|
| 0 0 12 * * ? | Fire at 12pm (noon) 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. |
| 0 0 12 1/5 * ? | Fire at 12pm (noon) every 5 days every month, starting on the first day of the month. |
JBI Descriptor
The Quartz component is configured with a CRON expression, the identifiers of a service to call and an XML message request to send to the service.
You have to deploy a service-unit with a JBI descriptor containing a consumes section with the right parameters.
Here is a sample of a SU JBI descriptor to call a Hello service with <text>hello</text> message, at 10:15am every day during the year 2005.
<?xml version="1.0" encoding="UTF-8"?> <!-- JBI descriptor for PEtALS' "petals-se-quartz" (QUARTZ), version 1.1 --> <jbi:jbi version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jbi="http://java.sun.com/xml/ns/jbi" xmlns:quartz="http://petals.ow2.org/components/quartz/version-1" xmlns:petalsCDK="http://petals.ow2.org/components/extensions/version-5" xmlns:generatedNs="http://petals.ow2.org/components/hello/version-3.0"> <jbi:services binding-component="false"> <jbi:consumes interface-name="generatedNs:Hello" service-name="generatedNs:HelloSrv" endpoint-name="HelloSrvEndpoint"> <!-- CDK specific elements --> <petalsCDK:operation>sayHelloOperation</petalsCDK:operation> <petalsCDK:mep>InOnly</petalsCDK:mep> <!-- Component specific elements --> <quartz:cron-expression>0 15 10 * * ? 2005</quartz:cron-expression> <quartz:content><![CDATA[ <text>hello</text> ]]></quartz:content> </jbi:consumes> </jbi:services> </jbi:jbi>
A JBI descriptor for a Quartz service-unit can only define one consumes block.
| Parameter | Description | Default | Required |
|---|---|---|---|
| consumes | Refer JBI service to invoke into the JBI bus. You can define an explicit endpoint: interface (QName) / Service (QName) / Endpoint (String) attributes. Or define implicit endpoint, to let the container routing according to QOS configurations (HA...): -by Interface attribute (QName) -by Service attribute (QName) |
- | Yes |
| Parameter | Description | Default | Required |
|---|---|---|---|
| mep | Message exchange pattern abbreviation. This parameter can be used in conjunction with the method of the CDK Listeners: createMessageExchange(Extensions extensions). This method returns a CDK Exchange corresponding to the type of the specified pattern. |
- | Yes |
| operation | Operation to call on a service. This parameter can be used in conjunction with the sending methods of the Listeners. If no operation is specified in the Message Exchange to send, this parameter will be used. | - | No |
| timeout | Timeout in milliseconds of a synchronous send. This parameter can be used in conjunction with the sendSync(Exchange exchange) method of the Listeners. Set 0 for an infinite timeout. | 30000 | No |
| Parameter | Description | Default | Required |
|---|---|---|---|
| cron-expression | A CRON expression, for example 0 30 10-13 ? * WED,FRI: trigger that fires at 10:30, 11:30, 12:30, and 13:30, on every Wednesday and Friday. | -
|
Yes
|
| content | The XML message to send to the scheduled service. Must be included in a CDATA section, as shown in the sample jbi.xml above. | -
|
Yes
|
Interceptor
Example of an interceptor configuration:
<?xml version="1.0" encoding="UTF-8"?> <!--...--> <petalsCDK:su-interceptors> <petalsCDK:send> <petalsCDK:interceptor name="myInterceptorName"> <petalsCDK:param name="myParamName">myParamValue</petalsCDK:param> <petalsCDK:param name="myParamName2">myParamValue2</petalsCDK:param> </petalsCDK:interceptor> </petalsCDK:send> <petalsCDK:accept> <petalsCDK:interceptor name="myInterceptorName"> <petalsCDK:param name="myParamName">myParamValue</petalsCDK:param> </petalsCDK:interceptor> </petalsCDK:accept> <petalsCDK:send-response> <petalsCDK:Interceptor name="myInterceptorName"> <petalsCDK:param name="myParamName">myParamValue</petalsCDK:param> </petalsCDK:Interceptor> </petalsCDK:send-response> <petalsCDK:accept-response> <petalsCDK:Interceptor name="myInterceptorName"> <petalsCDK:param name="myParamName">myParamValue</petalsCDK:param> </petalsCDK:Interceptor> </petalsCDK:accept-response> </petalsCDK:su-interceptors> <!--...-->
Interceptors configuration for SU (CDK)
| Parameter | Description | Default | Required |
|---|---|---|---|
| send | Interceptor dedicated to send phase, for an exchange sent by a consumer | - | No |
| accept | Interceptor dedicated to receive phase, for an exchange received by a provider | - | No |
| send-response | Interceptor dedicated to send phase, for an exchange (a response) received by a consumer | - | No |
| accept-response | Interceptor dedicated to receive phase, for an exchange sent (a response) by a provider | - | No |
| interceptor - name | Logical name of the interceptor instance. It can be referenced to add extended parameters by a SU Interceptor configuration. | - | Yes |
| param[] - name | The name of the parameter to use for the interceptor for this SU | - | No |
| param[] | The value of the parameter to use for the interceptor for this SU | - | No |
Service-Unit content
The service-unit must only contain the JBI descriptor.
The directory structure of a SU for the Quartz component looks like this:
su-quartz-SchedulerName-consume.zip
+ META-INF
- jbi.xml
Configuring the component
This component has no specific parameter in its configuration.
It only has the inherited ones from the CDK.
| Parameter | Description | Default | Required | Scope |
|---|---|---|---|---|
| acceptor-pool-size | The size of the thread pool used to accept Message Exchanges from the NMR. Once a message is accepted, its processing is delegated to the processor pool thread. | 3 |
Yes |
Runtime |
| processor-pool-size | The size of the thread pool used to process Message Exchanges. Once a message is accepted, its processing is delegated to one of the thread of this pool. | 10 | Yes |
Runtime |
| processor-max-pool-size | The maximum size of the thread pool used to process Message Exchanges. The difference between this size and the processorpool-size represents the dynamic threads that can be created and destroyed during overhead processing time. |
50 |
No | Runtime |
| notifications | Enable the notifications mode. The component produces and consumes generic notifications when receiving and sending messages. See the Petals View documentation for further details. |
false |
No |
Installation |
| notif-retry-policy-min | The notification retry policy is triggered if the notification component is not reachable at the starting of the component. Delay before the first notification retry is attempted, in second. |
1 | bounds to notifications | Installation |
| notif-retry-policy-max | The notification retry policy is triggered if the notification component is not reachable at the starting of the component. The maximum delay value authorized, in second. |
60 | bounds to notifications | Installation |
| notif-retry-policy-factor | The notification retry policy is triggered if the notification component is not reachable at the starting of the component. The factor applies on the previous attempt, for each new attempt. |
2 |
bounds to notifications | Installation |
| notif-retry-policy-nb | The notification retry policy is triggered if the notification component is not reachable at the starting of the component. Number of retry once the maximum delay value is reached. |
1000 |
bounds to notifications | Installation |
| properties-file | Name of the file containing properties used as reference by other parameters. Parameters of service-units and other parameters of the component reference the property name in the following pattern ${myPropertyName}. At runtime, the expression is replaced by the value of the property. The value of this parameter is:
|
- | No | Installation |
Definition of CDK parameter scope :
- Installation: The parameter can be set during the installation of the component, by using the installation MBean (see JBI specifications for details about the installation sequence). If the parameter is optional and has not been defined during the development of the component, it is not available at installation time.
- Runtime: The paramater can be set during the installation of the component and during runtime. The runtime configuration can be changed using the CDK custom MBean named RuntimeConfiguration. If the parameter is optional and has not been defined during the development of the component, it is not available at installation and runtime times.
Interceptor
Interceptors can be defined to inject some post or pre processing in the component during service processing.
Using interceptor is very sensitive and must be manipulate only by power users. An non properly coded interceptor engaged in a component can lead to uncontrolled behaviors, out of the standard process.
Example of an interceptor configuration:
<?xml version="1.0" encoding="UTF-8"?> <!--...--> <petalsCDK:component-interceptors> <petalsCDK:interceptor active="true" class="org.ow2.petals.myInterceptor" name="myInterceptorName"> <petalsCDK:param name="myParamName">myParamValue</petalsCDK:param> <petalsCDK:param name="myParamName2">myParamValue2</petalsCDK:param> </petalsCDK:interceptor> </petalsCDK:component-interceptors> <!--...-->
Interceptors configuration for Component (CDK)
| Parameter | Description | Default | Required |
|---|---|---|---|
| interceptor - class | Name of the interceptor class to implement. This class must extend the abstract class org.ow2.petals.component.common.interceptor.Interceptor. This class must be loadable from the component classloader, or in a dependent Shared Library classloader. | - | Yes |
| interceptor - name | Logical name of the interceptor instance. It can be referenced to add extended parameters by a SU Interceptor configuration. | - | Yes |
| interceptor - active | If true, the Interceptor instance is activated for every SU deployed on the component. If false, the Interceptor can be activated: -by the InterceptorManager Mbean at runtime, to activate the interceptor for every deployed SU. -by a SU configuration |
- | Yes |
| param[] - name | The name of the parameter to use for the interceptor. | - | No |
| param[] | The value of the parameter to use for the interceptor. | - | No |