Possível alterar o parâmetro ejb em tempo de execução para a anotação @Schedule?

Provavelmente uma pergunta boba para alguém com experiência ejb …

Eu quero ler e alterar o parâmetro minute dinamicamente para um dos meus beans EJB que usa o planejador Java EE por meio da anotação @Schedule . Alguém sabe como fazer isso em tempo de execução ao invés de codificá-lo na class como abaixo? Se eu fosse fazer isso programaticamente eu ainda poderia usar a anotação @Schedule ?

  @Schedule(dayOfWeek = "0-5", hour = "0/2", minute = "0/20", timezone = "America/Los_Angeles") private void checkInventory() { } 

@Schedule é para timeres automáticos criados pelo contêiner durante a implantação.

Por outro lado, você pode usar o TimerService que permite definir em tempo de execução quando o método @Timeout deve ser chamado.

Este pode ser um material interessante para você: O Tutorial do Java EE 6 – Usando o Serviço de Timer .

EDIT: Só para tornar esta resposta mais completa. Se é uma questão de que é possível do que a resposta seria sim, é.

Existe uma maneira de “alterar os parâmetros” do timer automático criado com @Schedule . No entanto, é bastante extraordinário – cancela o timer automático e cria um 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 ie 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(); } } 

Mais uma vez – pessoalmente, eu nunca usaria esse código e nunca iria querer ver algo assim em um projeto real 🙂 Ou o timer é:

  • automático e é criado pelo @Schedule codificando os valores ou definindo-os em ejb-jar.xml,
  • programático e é criado pelo código do aplicativo, que pode ter diferentes valores no tempo de execução.