Un planificador genera varios sucesos de notificación cuando realiza
una operación en una tarea. En este tema se describen estos sucesos de notificaciones.
Acerca de esta tarea
Los sucesos de notificación generados por un planificador cuando éste realiza
una tarea incluyen:
- Scheduled (planificada)
- Una tarea se ha planificado.
- Purged (purgada)
- Una tarea se ha suprimido permanentemente de un
almacén persistente.
- Suspended (suspendida)
- Una tarea se ha suspendido.
- Resumed (reanudada)
- Una tarea se ha reanudado.
- Completo
- Una tarea se ha ejecutado completamente. Si ha sido una
tarea repetitiva, todas las repeticiones se han realizado.
- Cancelled (cancelada)
- Una tarea se ha cancelado. No se ejecutará de nuevo.
- Firing (activando)
- Una tarea está lista para ejecutarse.
- Fired (activada)
- Una tarea se ha completado correctamente.
- Fire failed (Activación errónea)
- Una tarea no ha podido ejecutarse correctamente.
Para recibir sucesos de notificación, invoque el
método setNotificationSink() sobre la interfaz TaskInfo antes de crear la
tarea. El método setNotificationSink()
permite especificar el bean de sesión que va a actuar como llamada de retorno,
y una máscara que restringe los sucesos que se generan.
Procedimiento
- Cree un bean de sesión NotificationSink. Cree una bean de sesión sin estado que implementa el método handleEvent() en la interfaz remota com.ibm.websphere.scheduler.NotificationSink. Se llama al método
handleEvent() cuando se activa la notificación. Las interfaces remota y de
ubicación inicial se pueden establecer como se indica a continuación en el
descriptor de despliegue del bean:
com.ibm.websphere.scheduler.NotificationSinkHome
com.ibm.websphere.scheduler.NotificationSink
La interfaz NotificationSink (receptáculo de notificación) define el método siguiente:
public void handleEvent(TaskNotificationInfo task) throws java.rmi.RemoteException;
- Especifique el bean de sesión de notificación antes de enviar
la tarea al planificador mediante el método setNotificationSink() de la API
de la interfaz TaskInfo.
Si utiliza la API WASScheduler MBean para
establecer un receptáculo de notificación, el nombre JNDI (Java™ Naming and Directory
Interface) tiene que ser el nombre JNDI global plenamente calificado. Mediante un
archivo JSP (JavaServer Pages), servlet o componente EJB (Enterprise
JavaBeans),
busque y establezca el receptáculo de notificación en una tarea como se muestra en el
ejemplo de código siguiente:
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);
También puede utilizar la herramienta wsadmin para establecer el bean de sesión de llamada de retorno de receptáculo de notificación como se muestra en el siguiente ejemplo de script JACL:# Utilice el nombre JNDI global de NotificationSinkHome
# Considere que ya se ha creado una TaskInfo...
$taskInfo setNotificationSink “ejb/MyNotificationSink”
- Especifique la máscara de suceso. La máscara de
suceso se especifica como un mapa de bits de un entero. Puede utilizar una máscara individual como TaskNotificationInfo.CREATED para recibir sucesos específicos,
TaskNotificationInfo.ALL_EVENTS para recibir todos los sucesos o una combinación de sucesos específicos. Si utiliza Java™, el script podría
tener el aspecto del ejemplo siguiente:
int eventMask = TaskNotificationInfo.FIRED | TaskNotificationInfo.COMPLETE;
taskInfo.setNotificationSink(home,eventMask);
Si utiliza JACL, el script podría tener el aspecto del ejemplo siguiente:
# Establezca la máscara de suceso según dos constantes de suceso.
set eventmask [expr [java::field com.ibm.websphere.scheduler.TaskNotificationInfo FIRED] +
[java::field com.ibm.websphere.scheduler.TaskNotificationInfo COMPLETE]]
# Establezca el receptáculo de notificación según el nombre JNDI global Y
la máscara de suceso.
# Nota: es necesario utilizar aquí toda la signatura de método porque
# el resolutor de métodos no puede detectar siempre el método correcto.
$taskInfo {setNotificationSink String int} "ejb/MyNotificationSink" $eventmask
Resultados
Ahora, un bean de receptáculo de notificación se establece en un objeto
TaskInfo y puede enviarse ahora a un planificador mediante el método de
creación.