QuartzプロバイダはESB Muleのスケジューリング機能を追加します。このプロバイダはOpenSymphonyのQuartzに基づいています。
このトランスポート・プロバイダのJavadocはここにあります。
ソースコードはここにあります。
Quartzコネクタのプロパティ
| プロパティ |
説明 |
デフォルト |
必須 |
| factoryClassName |
スケジューラ・ファクトリのクラス名。普通はこのプロパティを変更しません。 |
org.quartz.impl.StdSchedulerFactory |
× |
| factoryProperties |
スケジューラ・ファクトリをカスタマイズするためのプロパティ・オブジェクト。 |
|
× |
| factory |
ある場合は、org.quartz.SchedulerFactoryのインスタンスを設定することができます。 |
|
× |
| scheduler |
スケジューラ・プロパティを既存スケジューラに設定することができます。 |
|
× |
Quartzエンドポイントのプロパティ
| プロパティ |
説明 |
デフォルト |
必須 |
| cronExpression |
特定の日付・時間にイベントをスケジュールするcron文。 |
|
cron 又は repeatInterval |
| repeatInterval |
イベントの間隔(ミリ秒)。 |
|
cron 又は repeatInterval |
| repeatCount |
スケジュールする回数。デフォルト設定の-1は、無限を意味する。 |
-1 |
× |
| startDelay |
最初のイベントを起こすまでの待ち時間。(ミリ秒) |
0 |
× |
| groupName |
スケジュール・ジョブのグループ名。 |
mule |
× |
| jobGroupName |
スケジュール・ジョブのジョブ・グループ名。 |
mule |
× |
その他にジョブによって指定が必要なプロパティ。以下は、一般的なESB Muleジョブの設定例です。
ジョブ
ESB Muleはイベントをスケジュールするために、デフォルトで以下のジョブの実装を提供しています:
以下に各実装に付いての説明を行います:
Mule Receiver Job(ESB Mule受信ジョブ)
コンポーネントに inbound quartzエンドポイントが設定された場合に使うジョブ。エンドポイントに設定によって、コンポーネントが受信するイベントをトリガーする。
簡単なエンドポイントは以下のように設定することができます:
<endpoint address="quartz:/myService">
<properties>
<property name="repeatInterval" value="1000" />
<property name="payloadClassName" value="com.foo.bar.Payload" />
</properties>
</endpoint>
上の設定をURIで指定することもできます:
<endpoint address="quartz:/myService?repeatInterval=1000&payloadClassName=com.foo.bar.Payload" />
ペイロードのイベントの設定
ペイロードは下の 相互排除的 なプロパティを使ってエンドポイントに設定することができます:
| プロパティ |
説明 |
| payload |
このぱプロパティの値を使う。 |
| payloadRef |
コンテナ内のオブジェクトへの参照。例えば、Jndi, SpringやClassloaderコンテナ内のオブジェクト。 |
いずれかのプロパティが設定されていない場合は org.mule.providers.NullPayload が使われます。
ESB Mule委託ジョブ
QuartzエンドポイントをディスパッチしたESB Muleイベントを呼び出したジョブ・オブジェクトを抽出します。ジョブはイベントのプロパティ(プロパティはコンテナ参照又は実際のジョブ・オブジェクトを指定することが可能)として設定すか、イベントのペイロードをジョブに設定することができます。後方の場合は、ジョブが起動すると、イベントのペイロードは http://jira.codehaus.org/secure/Signup.jspa です。
Quartzにイベントをディスパチする前に、以下のプロパティをMuleEventに設定することができます:
| プロパティ |
説明 |
| jobObject |
起動するジョブのインスタンス。 |
| jobRef |
JNDI, Spring, Classloaderコンテナのようなコンテナ・コンテキストのジョブ・オブジェクトの参照名。 |
ジョブがイベントのペイロードに設定された場合は、これらのプロパティは無視されて自動的にDelegatingJobが利用されます。
明示的にDelegating Jobを設定する場合は、出力エンドポイント(outbound endpoint)を設定します:
<endpoint name="schedulerEndpoint" address="quartz:/myService">
<properties>
<property name="jobClass" value="org.mule.providers.quartz.jobs.DelegatingJob"/>
<property name="jobRef" value="com.foo.MyQuartzJob"/>
<property name="repeatInterval" value="10000"/>
</properties>
</endpoint>
ESB Muleクライアント・ディスパッチ・ジョブ
ESB Muleエンドポイントに、一回又は繰り返しするメッセージのディスパッチをスケジュールします。このジョブを設定するには、 outbound (出力)エンドポイントに以下の設定をします:
<endpoint name="schedulerEndpoint" address="quartz:/myService">
<properties>
<property name="jobClass" value="org.mule.providers.quartz.jobs.MuleClientDispatchJob"/>
<property name="jobDispatchEndpoint" value="vm://service.X"/>
<property name="repeatInterval" value="10000"/>
<property name="repeatCount" value="5"/>
</properties>
</endpoint>
その他に以下のプロパティもあります:
| プロパティ |
説明 |
| jobClass |
実行をスケジュールするジョブ・クラス。 |
| jobDispatchEndpoint |
org.mule.providers.quartz.jobs.MuleClientDispatchJob に必須なプロパティです。イベントのディスパッチ先を指定します。 |
ジョブをスケジュールしたイベントは、イベント・ペイロードをディスパッチしたイベントと同じです。ジョブは同じペイロードで実行されます。このジョブは指定した日時にジョブを1回実行する場合に使われる場合が多くあります。
MuleClientReceiveJob
MuleClientDispatchJob と類似していますが、ディスパッチする前にエンドポイントから受信します。受信が無い場合は(受信結果が null )の場合は、ディスパッチは行われません。
<endpoint name="schedulerEndpoint" address="quartz:/myService">
<properties>
<property name="jobClass" value="org.mule.providers.quartz.jobs.MuleClientReceiveJob"/>
<property name="jobReceiveEndpoint" value="jms://queue.X"/>
<property name="jobReceiveTimeout" value="10000"/>
<property name="jobDispatchEndpoint" value="vm://service.X"/>
<property name="repeatInterval" value="10000"/>
</properties>
</endpoint>
設定は MuleClientDispatchJob と同じですが、以下の新しいパラメータが追加されます:
| プロパティ |
説明 |
| jobReceiveEndpoint |
ディスパッチする前に、イベント・ペイロードを銃身するエンドポイントURI(又はエンドポイント識別子) |
| jobReceiveTimeout |
リクエストをタイムアウトして null を返すまで待つ時間(ミリ秒)。 |
Cron文
cronエンドポイントは以下のように設定します:
<endpoint address="quartz:/myService">
<properties>
<property name="cronExpression" value="0 0 2 * * ?" />
....
</properties>
</endpoint>
cronExpression プロパティ文法の詳細はここにあります。
Quartzスクリプトの例
QuartzとGroovyと使う例です:(Glenn Murry氏に感謝!)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mule-configuration PUBLIC
"-//MuleSource //DTD mule-configuration XML V1.0//EN"
"http://mule.mulesource.org/dtds/mule-configuration.dtd">
<mule-configuration id="Script_Sample" version="1.0">
<description>
このESB Muleの設定は、Quartzプロバイダを使ってスクリプトをスケジュールする例です。
</description>
<global-endpoints>
<endpoint name="quartz.in" address="quartz:/myService">
<properties>
<property name="repeatInterval" value="2000" />
<property name="repeatCount" value="4" />
<property name="startDelay" value="3000" />
<property name="payloadClassName" value="" />
</properties>
</endpoint>
</global-endpoints>
<model name="sample">
<mule-descriptor name="scriptRunner"
implementation="org.mule.components.script.jsr223.ScriptComponent"
inboundEndpoint="quartz.in">
<properties>
<property name="scriptEngineName" value="groovy"/>
<text-property name="scriptText">
println "Yo!"
</text-property>
</properties>
</mule-descriptor>
</model>
</mule-configuration>