スケジューラーがタスクの操作を行うと、各種の通知イベントが生成されます。 このトピックでは、これらの通知イベントについて説明します。
このタスクについて
スケジューラーがタスクを実行するときに、スケジューラーによって生成される通知イベントには、以下のものがあります。
- Scheduled
- タスクがスケジュールされています。
- Purged
- タスクがパーシスタント・ストアから完全に削除されます。
- Suspended
- タスクが中断されました。
- Resumed
- タスクが再開されました。
- 完了
- タスクが完全に実行されました。 これが繰り返しのタスクである場合、すべての繰り返しが
実行されました。
- Cancelled
- タスクがキャンセルされました。 タスクは再実行されません。
- Firing
- タスクの実行準備ができました。
- Fired
- タスクが正常に完了しました。
- Fire failed
- タスクが正常に完了できませんでした。
通知イベントを受け取るには、タスクを作成する前に、TaskInfo インターフェースに
対して setNotificationSink() メソッドを呼び出します。
setNotificationSink() メソッドを使用すると、コールバック
として作用する Session Bean、および生成されるイベントを制限するマスクを指定することができます。
手順
- 通知シンク 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;
- スケジューラーにタスクをサブミットする前に、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”
- イベント・マスクを指定します。 イベント・マスクは、整数ビットマップとして指定されます。
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 を
スケジューラーにサブミットできるようになりました。