Planificar tareas en JBoss

1
19880

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

1 COMENTARIO

  1. Hola, gracias por la info, muy buena expicación. En lo único que me confundo es en la parte de generar el .sar, dentro de la carpeta deploy del jboss lo que veo son folders .sar que dentro tienen un folder META-INF y otro folder que es como una copia de la ruta donde está la clase, pero eso de un fichero comprimido no lo entiendo.

    Agradeceria una explicación.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad