この章では、ジョブ・スケジューラのイベントとリスナーのフレームワークについて説明します。次のトピックについて説明します。
イベントは、ジョブの状態の変化を表します。ジョブの状態の各変化は、対応するイベントによって表されます。イベント・リスナーを使用して、これらのイベントに反応するようにアプリケーションをプログラミングできます。ジョブのライフ・サイクル中であればいつでも、1つまたは複数のジョブにイベント・リスナーをバインドできます。
ジョブ・スケジューラは、多数のイベントを使用してジョブの状態の変化を表します。表7-1に、これらのイベントをまとめます。
表7-1 ジョブ・スケジューラのイベント
イベント | 説明 |
---|---|
|
ジョブは、ブラックアウト・ウィンドウによって抑止されました。 |
|
ジョブの予定終了日付を過ぎました。 |
|
ジョブが作成されました。 |
|
ジョブが取り消されました。 |
|
ジョブが失敗しました。 |
|
ジョブが現在一時停止されているため抑止されています。 |
|
ジョブが成功しました。 |
|
実行しきい値を超えたため、ジョブは抑止されました。 |
|
ジョブは一時停止されました。 |
|
ジョブは削除されました。 |
|
前に一時停止されたジョブが再開されました。 |
イベントを受け取るには、イベント・リスナーが必要です。イベント・リスナーでは、oracle.ias.scheduler.event.EventListener
インタフェースを使用する必要があります。このインタフェースは次のように定義されています。
public interface EventListener extends java.util.EventListener { public void dispatch(SchedulerEvent event) throws Exception; public Class[] wants(); }
wants()
メソッドは、このリスナーが対象とするイベントの指定に使用され、これらの指定イベントに関連付けられたクラス・オブジェクトを返します。リスナーの実装後、対象のイベントの1つが発生するたびにdispatch()
メソッドが呼び出されます。
oracle.ias.scheduler.event.EventListener
インタフェースとそのメソッドの詳細は、『Oracle Containers for J2EE Job Scheduler API Reference』を参照してください。
例7-1は、JobExecutionFailedEvent
イベントとJobExecutionSucceededEvent
イベントを対象とするイベント・リスナーの実装方法を示しています。
例7-1 ジョブ・リスナーの実装
import oracle.ias.scheduler.event.*; public class TestListener implements EventListener { public void dispatch(SchedulerEvent event) { System.out.println("Got event, "+event.getClass().getName()); } public Class[] wants() { return new Class[] { oracle.ias.scheduler.event.JobExecutionFailedEvent.class, oracle.ias.scheduler.event.JobExecutionSucceeded.class }; } }
ジョブ・リスナーを実装しバインドする際は、次の点に注意してください。
ジョブ・リスナーの処理は最小限に抑えます。イベントはジョブ・リスナーによって順番に処理されるため、長い処理を避ける必要があります。処理が長くなる場合は、後で処理されるようにイベントをシリアライズすることを検討してください。
すべてのジョブに同じジョブ・リスナーを使用できますか。
はい。イベントのgetHandle()
メソッドを使用して、どのイベントをどのジョブに関連付けるかを指定します。
すべてのジョブに同じジョブ・リスナーを使用する場合、ジョブ・リスナーのインスタンスはいくつ作成されますか。
ジョブ・リスナーはジョブごとに1つ必要です。
ジョブ・リスナーのdispatch()メソッドはリエントラントですか(このメソッドの使用中にこのメソッド自身をコールできますか)。
はい。ジョブ・リスナーのメンバー変数を変更する場合は適切な対策をとってください(ロックを使用してリソースの競合を防ぐなど)。
ジョブ・リスナー・インスタンスの状態は、コンテナの再起動を通して永続的ですか。
いいえ。ジョブ・リスナー・インスタンスの状態は永続的ではありません。