example ejemplo java timer glassfish ejb-3.1 schedule

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() { }