スケジューラー通知の受信

スケジューラーがタスクの操作を行うと、各種の通知イベントが生成されます。 このトピックでは、これらの通知イベントについて説明します。

このタスクについて

スケジューラーがタスクを実行するときに、スケジューラーによって生成される通知イベントには、以下のものがあります。
Scheduled
タスクがスケジュールされています。
Purged
タスクがパーシスタント・ストアから完全に削除されます。
Suspended
タスクが中断されました。
Resumed
タスクが再開されました。
完了
タスクが完全に実行されました。 これが繰り返しのタスクである場合、すべての繰り返しが 実行されました。
Cancelled
タスクがキャンセルされました。 タスクは再実行されません。
Firing
タスクの実行準備ができました。
Fired
タスクが正常に完了しました。
Fire failed
タスクが正常に完了できませんでした。

通知イベントを受け取るには、タスクを作成する前に、TaskInfo インターフェースに 対して setNotificationSink() メソッドを呼び出します。 setNotificationSink() メソッドを使用すると、コールバック として作用する Session Bean、および生成されるイベントを制限するマスクを指定することができます。

手順

  1. 通知シンク Session Bean を作成します。 com.ibm.websphere.scheduler.NotificationSink リモート・インターフェースの handleEvent() メソッドを実装する Stateless Session Bean を作成します。 handleEvent() メソッドは、通知が実行される際に呼び出されます。 ホーム・インターフェースおよびリモート・インターフェースは、Bean のデプロイメント記述子で以下のように設定できます。
    com.ibm.websphere.scheduler.NotificationSinkHome
    com.ibm.websphere.scheduler.NotificationSink

    NotificationSink インターフェースは、以下のメソッドを定義します。

    public void handleEvent(TaskNotificationInfo task) throws java.rmi.RemoteException;
  2. スケジューラーにタスクをサブミットする前に、TaskInfo インターフェース API の setNotificationSink() メソッドを使用して、 通知シンク Session Bean を指定します
    WASScheduler MBean API を使用して通知シンクを設定する場合には、 Java™ Naming and Directory Interface (JNDI) 名が完全修飾グローバル JNDI 名である必要があります。 JavaServer Pages (JSP) ファイル、サーブレット、 または Enterprise JavaBeans (EJB) コンポーネントを使用して、以下のコード例で示しているように、 タスクで通知シンクの検索および設定を行います。
    TaskInfo taskInfo = ...
    Object o = new InitialContext().lookup("java:comp/env/ejb/NotificationSink");
    NotificationSinkHome home = (NotificationSinkHome )javax.rmi.PortableRemoteObject.narrow(o,NotificationSinkHome.class);
    taskInfo.setNotificationSink(home,TaskNotificationInfo.ALL_EVENTS);
    wsadmin ツールを使用して、以下の JACL スクリプト例のように通知シンク・コールバック・セッション Bean を設定することもできます。
    # Use the NotificationSinkHome’s Global JNDI name
    # Assume that a TaskInfo was already created...
    $taskInfo setNotificationSink “ejb/MyNotificationSink”
  3. イベント・マスクを指定します。 イベント・マスクは、整数ビットマップとして指定されます。 TaskNotificationInfo.CREATED などの個別のマスク を使用して特定のイベントを受信するか、 TaskNotificationInfo.ALL_EVENTS を使用してすべてのイベント、または特定のイベントの組み合わせを受信することができます。 Java™ を使用する場合、 スクリプトは以下の例のようになります。
    int eventMask = TaskNotificationInfo.FIRED | TaskNotificationInfo.COMPLETE;
    taskInfo.setNotificationSink(home,eventMask);
    JACL を使用する場合、スクリプトは以下の例のようになります。
    # Set the event mask based on two event constants.
    set eventmask [expr [java::field com.ibm.websphere.scheduler.TaskNotificationInfo FIRED] + [java::field com.ibm.websphere.scheduler.TaskNotificationInfo COMPLETE]]
    
    # Set our Notification Sink based on our global JNDI name AND event mask.
    # Note:  We need to use the full method signature here since the 
    # method resolver can’t always detect the right method.
    $taskInfo {setNotificationSink String int} "ejb/MyNotificationSink" $eventmask

タスクの結果

通知シンク Bean が TaskInfo オブジェクトに設定され、create メソッドを使用してその Bean を スケジューラーにサブミットできるようになりました。

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsch_usenotificationsink
ファイル名:tsch_usenotificationsink.html