java - ejemplo - ¿Es posible cambiar el parámetro ejb en tiempo de ejecución para la anotación de programación?
timer ejb 3.0 example (1)
@Schedule
es para temporizadores automáticos creados por el contenedor durante la implementación.
Por otro lado, puede usar TimerService
que le permite definir en tiempo de ejecución cuando se debe @Timeout
método @Timeout
.
Este podría ser un material interesante para su: El tutorial de Java EE 6 - Uso del servicio de temporizador .
EDITAR: Sólo para hacer esta respuesta más completa. Si es una cuestión de ¿ es posible de lo que sería la respuesta? Sí, lo es.
Hay una manera de "cambiar los parámetros" del temporizador automático creado con @Schedule
. Sin embargo, es bastante extraordinario : cancela el temporizador automático y crea uno programático similar:
// Automatic timer - run every 5 seconds
// It''s a automatic (@Schedule) and programmatic (@Timeout) timer timeout method
// at the same time (which is UNUSUAL)
@Schedule(hour = "*", minute = "*", second = "*/5")
@Timeout
public void myScheduler(Timer timer) {
// This might be checked basing on i.e. timer.getInfo().
firstSchedule = ...
if (!firstSchedule) {
// ordinary code for the scheduler
} else {
// Get actual schedule expression.
// It''s the first invocation, so it''s equal to the one in @Schedule(...)
ScheduleExpression expr = timer.getSchedule();
// Your new expression from now on
expr.second("*/7");
// timers is TimerService object injected using @Resource TimerService.
// Create new timer based on modified expression.
timers.createCalendarTimer(expr);
// Cancel the timer created with @Schedule annotation.
timer.cancel();
}
}
Una vez más, personalmente, nunca usaría ese código y nunca querría ver algo como esto en un proyecto real :-) O el temporizador es:
- automático y es creado por
@Schedule
codificando los valores o definiéndolos en ejb-jar.xml, - Programmatic y es creado por el código de la aplicación que puede tener diferentes valores en el tiempo de ejecución.
Probablemente una pregunta tonta para alguien con experiencia ejb ...
Quiero leer y cambiar el parámetro de minutos dinámicamente para uno de mis beans EJB que usa el programador Java EE a través de la anotación @Schedule
. ¿Alguien sabe cómo hacer esto en tiempo de ejecución en lugar de codificarlo en la clase como abajo? Si lo hiciera programáticamente, ¿podría seguir usando la anotación @Schedule
?
@Schedule(dayOfWeek = "0-5", hour = "0/2", minute = "0/20", timezone = "America/Los_Angeles")
private void checkInventory() {
}