当调度程序对任务执行操作时,它会生成各种通知事件。本主题中描述了这些通知事件。
关于此任务
调度程序执行任务时生成的通知事件包括:
- 已调度
- 已安排的任务。
- 已清除
- 已从持久存储中永久删除的任务。
- 已暂挂
- 已暂挂的任务。
- 已继续
- 已继续的任务。
- 完成
- 已执行完毕的任务。如果它是重复任务,那么表明已完成所有重复。
- 已取消
- 已取消的任务。不会再运行。
- 正在触发
- 准备运行的任务。
- 已触发
- 已成功完成的任务。
- 触发失败
- 无法成功运行的任务。
要接收通知事件,请在创建任务之前调用 TaskInfo 接口上的 setNotificationSink() 方法。setNotificationSink() 方法使您能指定作为回调操作的会话 Bean 以及限制生成的事件的掩码。
过程
- 创建一个 NotificationSink 会话 Bean。 创建一个无状态会话 Bean,该 Bean 实现了 com.ibm.websphere.scheduler.NotificationSink 远程接口中的 handleEvent() 方法。触发通知时将调用 handleEvent() 方法。Home 和 Remote 接口在该 Bean 的部署描述符中可以设置如下:
com.ibm.websphere.scheduler.NotificationSinkHome
com.ibm.websphere.scheduler.NotificationSink
NotificationSink 接口定义了以下方法:
public void handleEvent(TaskNotificationInfo task) throws java.rmi.RemoteException;
- 使用 TaskInfo 接口 API setNotificationSink() 方法将任务提交给调度程序之前,指定该通知接收器会话 Bean。
如果使用 WASScheduler MBean API 来设置通知接收器,那么 Java™ 命名和目录接口 (JNDI) 名称必须是标准的全局 JNDI 名称。通过使用 JavaServer Pages (JSP) 文件、servlet 或 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 工具来设置通知接收器回调会话 Bean(如以下 JACL 脚本编制示例所示):
# 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
结果
已在 TaskInfo 对象上设置了通知接收器 Bean,现在您可以使用 create 方法将它提交给调度程序。