Diferencia entre revisiones de «Timer Service En EJB»
(→Un ejemplo completo) |
|||
(No se muestran 2 ediciones intermedias de 2 usuarios) | |||
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. | ||
Línea 14: | Línea 15: | ||
Crear un timer es muy simple: | Crear un timer es muy simple: | ||
− | + | <code java> | |
TimerService timerService = context.getTimerService(); | TimerService timerService = context.getTimerService(); | ||
Timer timer = timerService.createTimer(5000, "timer de ejemplo"); | Timer timer = timerService.createTimer(5000, "timer de ejemplo"); | ||
+ | </code> | ||
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()''. | 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()''. | ||
Línea 28: | Línea 30: | ||
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. | 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. | ||
− | < | + | <code java> |
public class DemoTimerBean implements SessionBean, TimedObject { | public class DemoTimerBean implements SessionBean, TimedObject { | ||
private SessionContext context; | private SessionContext context; | ||
Línea 44: | Línea 46: | ||
} | } | ||
} | } | ||
− | </ | + | </code> |
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. | 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. | ||
Línea 51: | Línea 53: | ||
== Ver también == | == Ver también == | ||
* [[Quartz]] | * [[Quartz]] | ||
− | * [ | + | * [http://java.sun.com/j2ee/1.4/docs/api/javax/ejb/TimerService.html Javadoc de la clase Timer] |
− | * [ | + | * [http://java.sun.com/j2ee/1.4/docs/tutorial/doc/Session5.html Tutorial sobre el TimerService en EJB] |
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.
Contenido
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.