lunes, 13 de junio de 2011

Timer Services

Para este ejemplo estoy usando Netbeans 6.9, Ubuntu 10.04 y Glassfish V3.
Un timer es una rutina que llamada cada cierto tiempo por el servidor de aplicaciones, es similar a un cron job.
Para probar como funcionan los timers vamos a crear un Enterprise Applicaction llamado TimerProject.
Luego creamos un EJB de Session, Stateles y con interface remota, en el paquete com.ejemplo Llamaremos a la clase Timer1

Después de esto agregamos una función llamada invocacion1(). Programaremos esta función para que se ejecute cada minuto.
Es decir:

package com.ejemplo;

import javax.ejb.Schedule;
import javax.ejb.Stateless;

@Stateless
public class Timer1 implements Timer1Remote {
@Schedule(minute="*",hour="*")
public void invocacion1() {
System.out.println("Esta es una invocación que se realiza cada minuto");
}
}

Luego hacemos click con el boton derecho sobre el EnterpriseProject y seleccionamos deploy.

Finalmente desde la pestaña de services levantamos el servidor


y esperamos un minuto para revisar el log del servidor:



Tenemos otra manera de ejecutar un timer y es por medio de la inyección de recursos.
Para este ejemplo voy a ejecutar un timer a los 1000 ms de iniciado el servidor y se ejecutará la función tarea() cada 20000 ms. Para eso debo crear la función llamada tarea():


Para eso voy a modificar la clase Timer1, de la siguiente manera:

package com.ejemplo;

import javax.annotation.Resource;
import javax.ejb.Schedule;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerService;

@Stateless
public class Timer1 implements Timer1Remote {

int tiempoInicio=1000;
int tiempoRepeticion=20000;
String mensaje="Llamada a la rutina";
@Resource TimerService timerService;


@Schedule(minute="*",hour="*")
public void invocacion1() {
System.out.println("Esta es una invocación que se realiza cada x segundos");
}

public void crearTimer() {
System.out.println("Dentro del metodo crear Timer");
System.out.println("Cada "+tiempoRepeticion+" se ejecutará la función tarea");
Timer timer = timerService.createTimer(tiempoInicio,tiempoRepeticion,
mensaje);
}
@Timeout
public void tarea(Timer timer) {
System.out.println("Aqui se hará la respectiva codificación");
}

}


Al ejecutar tenemos la siguiente salida:

No hay comentarios:

Publicar un comentario