Parametrizar el planificador EJB con la expresión de programación
Estoy usando EJB 3.1 y jboss-eap-6.4 y quiero establecer algunos parámetros dinámicos para la hora, minuto y segundo del planificador ejb de la siguiente manera:
Código no paramétrico, que se ejecuta en 30 segundos de cada 5 minutos:
@Singleton
@Startup
public class TriggerJob {
@EJB
//some db injections
@PostConstruct
public void onStartup() {
try {
preparation();
} catch (CertificateVerificationException e) {
e.printStackTrace();
}
}
@Schedule(second = "30", minute = "*/5", hour = "*", persistent = false)
public void preparation() {
//my scheduled tasks
}
}
El código anterior se ejecuta correctamente.
Código paramétrico dinámico, que debería ejecutarse en el segundo 30 de cada 5 minutos:
@Singleton
@Startup
public class TriggerJob {
@EJB
//some injections
private boolean runningFlag = false;
@Resource
private TimerService timerService;
public void setTimerService(TimerService timerService) {
this.timerService = timerService;
}
@Timeout
public void timerTimeout() {
try {
preparation();
} catch (CertificateVerificationException e) {
e.printStackTrace();
}
}
@PostConstruct
private void postCunstruct() {
timerService.createCalendarTimer(createSchedule(),new TimerConfig("EJB timer service timeout at ",false));
}
private ScheduleExpression createSchedule() {
ScheduleExpression expression = new ScheduleExpression();
expression.hour("*")
.minute("*/5")
.second("30");
return expression;
}
public void preparation(){
// my scheduled tasks
}
}
El código anterior no se ejecuta correctamente, generalmente se ejecuta varias veces por segundo.
Además, he leído algunas otras preguntas que no me ayudaron:
Parámetros dinámicos para el método @Schedule en un EJB 3.x
Uso del servicio de temporizador: tutorial de Java EE 6
Cualquier ayuda sería apreciada.