接收调度程序通知

当调度程序对任务执行操作时,它会生成各种通知事件。本主题中描述了这些通知事件。

关于此任务

调度程序执行任务时生成的通知事件包括:
已调度
已安排的任务。
已清除
已从持久存储中永久删除的任务。
已暂挂
已暂挂的任务。
已继续
已继续的任务。
完成
已执行完毕的任务。如果它是重复任务,那么表明已完成所有重复。
已取消
已取消的任务。不会再运行。
正在触发
准备运行的任务。
已触发
已成功完成的任务。
触发失败
无法成功运行的任务。

要接收通知事件,请在创建任务之前调用 TaskInfo 接口上的 setNotificationSink() 方法。setNotificationSink() 方法使您能指定作为回调操作的会话 Bean 以及限制生成的事件的掩码。

过程

  1. 创建一个 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;
  2. 使用 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”
  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

结果

已在 TaskInfo 对象上设置了通知接收器 Bean,现在您可以使用 create 方法将它提交给调度程序。

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsch_usenotificationsink
文件名:tsch_usenotificationsink.html