Necesito crear un temporizador de intervalo que se configura para ejecutarse una vez a la semana automáticamente. No quiero que comience en función de la entrada del usuario, pero quiero que se cree cuando la aplicación se implementa en el servidor. Cada ejemplo que he visto tiene otra clase que inicia el temporizador. No quiero usar un bean controlado por mensaje para crear el temporizador porque la auditoría solo debe consultar una base de datos durante un período de tiempo dado y no se basa en acciones que envían mensajes.¿Cómo iniciar un EJB Timer en la implementación?
He incluido un ejemplo de un temporizador. En el siguiente ejemplo, el temporizador debe disparar cada 10 minutos. Como prueba, quiero que el temporizador dispare cada 10 minutos para poder probar el temporizador.
@Stateless
public class TimerTest implements
TimerTestLocal, TimerTestRemote{
@Resource
private TimerService timerService;
private Logger log = Logger.getLogger(TimerTest.class);
private long interval = 1000 * 60 * 10;
private static String TIMER_NAME = "AuditTimer";
public void scheduleTimer() throws NamingException {
// TODO Auto-generated method stub
Calendar cal = Calendar.getInstance();
//cal.set(Calendar.HOUR_OF_DAY, 23);//run at 11pm
//cal.set(Calendar.MINUTE, 00);
//cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm");
log.debug("schedule for: " + sdf.format(cal.getTime()));
timerService.createTimer(cal.getTime(), interval, TIMER_NAME);
}
public void cancelTimer() {
for(Object obj : timerService.getTimers())
{
Timer timer = (Timer)obj;
if(timer.getInfo().equals(TIMER_NAME))
timer.cancel();
}
}
@Timeout
public void timerEvent(Timer timer) {
log.debug("timer fired");
}
}
Entonces, ¿hay alguna forma de que pueda iniciar este temporizador cuando se implementa la aplicación? No creo que sea una buena idea colocar la creación del temporizador en un método @PostConstruct porque los cargadores de clase están en el servidor.
Eso funcionó muy bien. Gracias. – scheibk