ヘッダーをスキップ
Oracle Containers for J2EEジョブ・スケジューラ開発者ガイド
10g(10.1.3.1.0)
B31853-01
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

7 Oracle Application Server Containers for J2EEのイベントとリスナー

この章では、ジョブ・スケジューラのイベントとリスナーのフレームワークについて説明します。次のトピックについて説明します。

7.1 イベントとイベント・リスナー

イベントは、ジョブの状態の変化を表します。ジョブの状態の各変化は、対応するイベントによって表されます。イベント・リスナーを使用して、これらのイベントに反応するようにアプリケーションをプログラミングできます。ジョブのライフ・サイクル中であればいつでも、1つまたは複数のジョブにイベント・リスナーをバインドできます。

ジョブ・スケジューラは、多数のイベントを使用してジョブの状態の変化を表します。表7-1に、これらのイベントをまとめます。

表7-1 ジョブ・スケジューラのイベント

イベント 説明

oracle.ias.scheduler.event.JobBlackoutEvent

ジョブは、ブラックアウト・ウィンドウによって抑止されました。

oracle.ias.scheduler.event.JobCompletedEvent

ジョブの予定終了日付を過ぎました。

oracle.ias.scheduler.event.JobCreatedEvent

ジョブが作成されました。

oracle.ias.scheduler.event.JobExecutionCancelledEvent

ジョブが取り消されました。

oracle.ias.scheduler.event.JobExecutionFailedEvent

ジョブが失敗しました。

oracle.ias.scheduler.event.JobExecutionPausedEvent

ジョブが現在一時停止されているため抑止されています。

oracle.ias.scheduler.event.JobExecutionSucceededEvent

ジョブが成功しました。

oracle.ias.scheduler.event.JobExecutionThresholdExceededEvent

実行しきい値を超えたため、ジョブは抑止されました。

oracle.ias.scheduler.event.JobPausedEvent

ジョブは一時停止されました。

oracle.ias.scheduler.event.JobRemovedEvent

ジョブは削除されました。

oracle.ias.scheduler.event.JobResumedEvent

前に一時停止されたジョブが再開されました。


7.2 イベント・リスナーの実装とバインド

イベントを受け取るには、イベント・リスナーが必要です。イベント・リスナーでは、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
        };
    }
}

例7-2は、例7-1で作成されたTestListenerリスナーのバインド方法を示しています。

例7-2 ジョブへのリスナーのバインド

JobHandle handle = scheduler.add(...);

// bind the listener to the job
scheduler.addListener(handle,TestListener.class);

7.3 イベント・リスナーの実装とバインドのベスト・プラクティス

ジョブ・リスナーを実装しバインドする際は、次の点に注意してください。

7.4 ジョブ・リスナーに関するFAQ

すべてのジョブに同じジョブ・リスナーを使用できますか。

はい。イベントのgetHandle()メソッドを使用して、どのイベントをどのジョブに関連付けるかを指定します。

すべてのジョブに同じジョブ・リスナーを使用する場合、ジョブ・リスナーのインスタンスはいくつ作成されますか。

ジョブ・リスナーはジョブごとに1つ必要です。

ジョブ・リスナーのdispatch()メソッドはリエントラントですか(このメソッドの使用中にこのメソッド自身をコールできますか)。

はい。ジョブ・リスナーのメンバー変数を変更する場合は適切な対策をとってください(ロックを使用してリソースの競合を防ぐなど)。

ジョブ・リスナー・インスタンスの状態は、コンテナの再起動を通して永続的ですか。

いいえ。ジョブ・リスナー・インスタンスの状態は永続的ではありません。