En algún momento surge la necesidad de ejecutar procesos periódicos, bien para automatizar tareas repetitivas de un proyecto o más generales que afecten a la administración general de nuestros sistemas. Esta necesidad la desata el quitarnos de encima trabajo tedioso y repetitivo o evitarnos la necesidad de estar pendientes del reloj y el calendario para realizar una comprobación puntual.
Para facilitarnos la vida disponemos en JBoss del paquete Quartz (que enmascara el uso de threads) para realizar labores concernientes la aplicación de la que forme parte, pudiendo acceder alos componentes y clases de la aplicación y realizar actualizaciones o sincronizar datos, envío de correos, etc … . También podemos programar el scheduler de JBoss análogamente a lo que haríamos programando un cron de linux para tareas de backup, limpieza de directorios temporales … .
Vamos a empezar por el último que es más fácil y rápido de probar.
Planificación con JBossScheduler Service
Lo primero que tenemos que hacer es verificar que en el directorio deploy de la instancia de JBoss que estemos usando exista el fichero de despliegue del Timer Service timer-service.xml que define el servicio que usan las tareas planificadas. Debe algo parecido a:
< ?xml version="1.0" encoding="UTF-8" ?>
<server>
<mbean code="org.jboss.mx.timer.JBossTimer"
name="jboss:service=Timer">
</mbean>
</server>
Así ya le damos un nombre al servicio que es el que esperan por defecto nuestras tareas planificadas.
Dentro de nuestro proyecto necesitamos colocar en META-INF el archivo jboss-service.xml donde vamos a especificar la clase que vamos a programar (que debe implementar elinterface org.jboss.varia.scheduler.Scheduler componiendo el método void perform(Date pTimeOfCall, long pRemainingRepetitions) que será el código que ejecute la tarea) y los parámetros de programación.
Por ejemplo:
< ?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.varia.scheduler.Scheduler" name="acme:service=Scheduler">
<attribute name="StartAtStartup">true</attribute>
<attribute name="SchedulableClass">es.jromay.planificacion.Tarea1</attribute>
<attribute name="InitialStartDate">2012/04/30</attribute>
<attribute name="SchedulePeriod">10000</attribute>
<attribute name="InitialRepetitions">24</attribute>
</mbean>
</server>
Los posibles valores se describen en la siguiente tabla:
| Parámetro | Valores |
|---|---|
| StartAtStartup | true/false |
| SchedulableClass | La clase a ejecutar |
| InitialStartDate | NOW, ms desde el 1/1/1977 o cadena que pueda interpretar SimpleDateFormat por defecto en nuestro entorno |
| SchedulePeriod | Intervalo de ejecución en ms |
| InitialRepetitions | Numero de repeticiones, el -1 significa bucle infinito |
Construimos la clase con el código que queremos ejecutar periódicamente:
package es.jromay.planificacion;
import java.util.Date;
import org.jboss.varia.scheduler.Schedulable;
/**
* @author Javi Romay
*
*/
public class Tarea1 implements Schedulable {
/* (non-Javadoc)
* @see org.jboss.varia.scheduler.Schedulable#perform(java.util.Date, long)
*/
@Override
public void perform(Date arg0, long arg1) {
System.out.println("Fecha de ejecución de Tarea1: "+arg0.toString()+" y quedan "+arg1+" ejecuciones.");
}
}
Ya sólo queda empaquetarlo en un.war y ponerlo en eldirectorio deploy para que se despliegue siendo el resultado del ejemplo:
12:22:09,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:22:09 CEST 2011 y quedan 23 ejecuciones.
12:22:19,515 INFO [STDOUT] Fecha de ejecución de Tarea1: Sat Apr 30 12:22:19 CEST 2011 y quedan 22 ejecuciones.
12:22:29,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:22:29 CEST 2011 y quedan 21 ejecuciones.
12:22:39,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:22:39 CEST 2011 y quedan 20 ejecuciones.
12:22:49,515 INFO [STDOUT] Fecha de ejecución de Tarea1: Sat Apr 30 12:22:49 CEST 2011 y quedan 19 ejecuciones.
12:22:59,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:22:59 CEST 2011 y quedan 18 ejecuciones.
12:23:09,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:23:09 CEST 2011 y quedan 17 ejecuciones.
12:23:19,515 INFO [STDOUT] Fecha de ejecución de Tarea1: Sat Apr 30 12:23:19 CEST 2011 y quedan 16 ejecuciones.
12:23:29,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:23:29 CEST 2011 y quedan 15 ejecuciones.
12:23:39,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:23:39 CEST 2011 y quedan 14 ejecuciones.
12:23:49,515 INFO [STDOUT] Fecha de ejecución de Tarea1: Sat Apr 30 12:23:49 CEST 2011 y quedan 13 ejecuciones.
12:23:59,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:23:59 CEST 2011 y quedan 12 ejecuciones.
12:24:09,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:24:09 CEST 2011 y quedan 11 ejecuciones.
12:24:19,515 INFO [STDOUT] Fecha de ejecución de Tarea1: Sat Apr 30 12:24:19 CEST 2011 y quedan 10 ejecuciones.
12:24:29,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:24:29 CEST 2011 y quedan 9 ejecuciones.
12:24:39,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:24:39 CEST 2011 y quedan 8 ejecuciones.
12:24:49,515 INFO [STDOUT] Fecha de ejecución de Tarea1: Sat Apr 30 12:24:49 CEST 2011 y quedan 7 ejecuciones.
12:24:59,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:24:59 CEST 2011 y quedan 6 ejecuciones.
12:25:09,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:25:09 CEST 2011 y quedan 5 ejecuciones.
12:25:19,515 INFO [STDOUT] Fecha de ejecución de Tarea1: Sat Apr 30 12:25:19 CEST 2011 y quedan 4 ejecuciones.
12:25:29,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:25:29 CEST 2011 y quedan 3 ejecuciones.
12:25:39,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:25:39 CEST 2011 y quedan 2 ejecuciones.
12:25:49,515 INFO [STDOUT] Fecha de ejecución de Tarea1: Sat Apr 30 12:25:49 CEST 2011 y quedan 1 ejecuciones.
12:25:59,515 INFO [STDOUT] Fecha de ejecución deTarea1: Sat Apr 30 12:25:59 CEST 2011 y quedan 0 ejecuciones.
Posts relacionados:
Si se quiere consultar cualquier tipo de contenido estructurado del VFS no tenemos más que usar ...
El tercer caso que vamos a ver de elementos reutilizables es el más evidente: El Menú. Si quere ...
Hace mucho tiempo que no escribía sobre Opencms porque ya no desarrollo habitualmente para é ...
Cuando nos grabamos en la cabeza el ciclo de vida clásico de un proyecto de software hay una fa ...
Cuando te pones a escribir algún post que contenga código fuente siempre te quedas con la sensac ...



Un comentario
Nicolas escribió:
25 junio, 2012, a las 20:52 (UTC 0 )
Hola,
gracias por la publicación es lo que necesito… eso si no me funciona no puedo hacer el import y al deployar se me cae el sistema por la creacion del archivo timer-service.xml en jboss(la carpeta deploy no lo tenia por lo que lo cree)… alguien me puede ayudar?