Diferencia entre revisiones de «Timer Service En EJB»

De Dos Ideas.
Saltar a: navegación, buscar
 
Línea 1: Línea 1:
 +
[[Category:EJB]]
 
Los [[EJB]] proveen un servicio de timer que permite ejecutar métodos en forma programada.
 
Los [[EJB]] proveen un servicio de timer que permite ejecutar métodos en forma programada.
  

Revisión actual del 15:52 26 ago 2009

Los EJB proveen un servicio de timer que permite ejecutar métodos en forma programada.

No provee todas las funcionalidades de Quartz, pero puede resultar práctico para algunas ocasiones. A continuación un ejemplo.

La interfaz TimedObject

Tanto los EJB de entidad como de sesión son susceptibles de implementar esta interfaz, que les permite declarar el método que se ejecutará al activarse el timer.

En particular, se debe implementar el método ejbTimeout(Timer), el cual será invocado por el servicio de Timer cuando se active el mismo. Este método contendrá la lógica que queremos se ejecute.

La clase TimerService

Toda la administración de Timers se realiza a través de la clase TimerService. Esta clase, que se obtiene a partir del SessionContext que tienen los EJB, es la que permite la creación de timers en la instancia del EJB.

Crear un timer es muy simple:

TimerService timerService = context.getTimerService();
Timer timer = timerService.createTimer(5000, "timer de ejemplo");

Estas líneas crearan un timer que se ejecutará 5000 milisegundos después de creado. Es decir, 5000 milisegundos luego de esta creación se ejecutará el método ejbTimeout().

¿Y dónde ejecutar esto?

La creación del Timer se puede realizar en cualquier método el EJB. En particular, si se quiere que se ejecute al crearse, deberá codificarse en el método ejbCreate(). Sino, puede ser expuesto en un método de negocio común.

Un ejemplo completo

La siguiente clase es un EJB de sesión que tiene un método de negocio crearTimer. Este método está expuesto en la interfaz remota. Cuando un cliente lo invoca, se crea un timer con el intervalo indicado.

public class DemoTimerBean implements SessionBean, TimedObject {
    private SessionContext context;
    //métodos comunes del EJB
    public void ejbTimeout(Timer arg0) {
        System.out.println("---------------- Ejecutando la lógica de negocio");
    }
    public TimerHandle crearTimer(long intervalo) {
        TimerService timerService = context.getTimerService();
   	 Timer timer = timerService.createTimer(intervalo, "created timer");
   	 return timer.getHandle();
    }
}

El Timer del ejemplo se ejecuta una única vez. Se pueden crear otros Timer que repiten su ejecución en forma periódica, cada un intervalo indicado.


Ver también