Consultor tecnológico de desarrollo de proyectos informáticos.
Ingeniero Técnico en Telecomunicaciones
Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación
Somos expertos en Java/J2EE
Regístrate para votar
PLANIFICAR TAREAS EN JBOSS.
Muchas veces nos surge la necesidad de planificar tareas en nuestras aplicaciones y que se ejecuten de manera recursiva. Tenemos gran cantidad de posibilidades para realizar algo similar:
Utilizar alguna utilidad de sistema operativo que invoque algún script: (cron de unix, Tareas planificadas en windows)
Java nos provee también dos clases para realizar tareas de este tipo: Timer y TimerTask.
Etc...
Os voy a enseñar otra forma de planificar tareas en Jboss. Para ello haremos uso de la clase org.jboss.varia.scheduler.Scheduler.
Para el ejercicio estoy usando: Jboss 4.0.4
Lo primero que haremos es crearnos el fichero jboss-service.xml, porque vamos a desplegar la tarea como un servicio.
Planificaremos una tarea dentro de él:
<server>
<mbean code="org.jboss.varia.scheduler.Scheduler" name=":service=Scheduler">
<attribute name="StartAtStartup">true</attribute>
<attribute name="SchedulableClass">com.autentia.TareaPlanificada</attribute>
<attribute name="InitialStartDate">NOW</attribute>
<attribute name="SchedulePeriod">60000</attribute>
<attribute name="InitialRepetitions">5</attribute>
</mbean>
</server>
En el fichero hemos configurado una tarea con los siguientes parámetros:
StartAtStartup: true indica que queremos que sea inicializada por el servidor. False indica que debe ser forzado su inicio.
SchedulableClass: clase que realiza la funcionalidad periódicamente. Esta clase debe implementar el interfaz org.jboss.varia.scheduler.Schedulable que define el método:
public void perform(Date fecha, long arg1)
Éste será el método que se invocará recursivamente.
InitialStartDate: Fecha planificada para la primera invocación. NOW indica +1 segundo desde la fecha actual.
ScheduledPeriod: frecuencia con la que Scheduler invocará a la clase Schedulable en milisegundos. En nuestro caso, cada minuto.
InitialRepetitions. Número de repeticiones de la tarea. -1 indica que la tarea se ejecutará hasta que el servidor se pare.
Una vez configurado el fichero, simplemente, crearemos la clase Schedulable:
public class TareaPlanificada implements Schedulable {
public void perform(Date fecha, long veces) {
System.out.println("Me invocan a las:" + fecha);
System.out.println("Todavía me deben ejecutar :" + veces + " veces" );
}
}
Ahora simplemente, generamos el fichero planificador.sar que será un fichero comprimido con la siguiente estructura:
META-INF/jboss-service.xml
com/autentia/TareaPlanificada.class
Una vez generado el ficchero, lo desplegamos en la ruta de despliegue de nuestro Jboss (por defecto <RUTA_INSTALACION_JBOSS>/server/default/deploy)
El resultado, será el siguiente:
17:51:44,750 INFO [STDOUT] Me invocan a las:Tue Jun 06 17:51:44 CEST 2006
17:51:44,750 INFO [STDOUT] Todavía me deben ejecutar :4 veces
17:52:44,718 INFO [STDOUT] Me invocan a las:Tue Jun 06 17:52:44 CEST 2006
17:52:44,718 INFO [STDOUT] Todavía me deben ejecutar :3 veces
17:53:44,718 INFO [STDOUT] Me invocan a las:Tue Jun 06 17:53:44 CEST 2006
17:53:44,718 INFO [STDOUT] Todavía me deben ejecutar :2 veces
17:54:44,718 INFO [STDOUT] Me invocan a las:Tue Jun 06 17:54:44 CEST 2006
17:54:44,718 INFO [STDOUT] Todavía me deben ejecutar :1 veces
17:55:44,718 INFO [STDOUT] Me invocan a las:Tue Jun 06 17:55:44 CEST 2006
17:55:44,718 INFO [STDOUT] Todavía me deben ejecutar :0 veces
¿ Fácil verdad ?...pues ya está hecho, ahora a darle chicha al método perform de nuestra clase Schedulable. Si necesitas ayuda, ya sabes.... http://www.autentia.com
Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.








