Два подхода: вы можете просто задать логическое значение для вашего bean-компонента и указать discover()
, чтобы проверить, должно ли оно выполняться. Это все равно приведет к выходу discover()
каждые две минуты, хотя ничего не делать. Но это позволит вам добавить метод resumeDiscovery()
для получения более поздней даты.
@Stateless(name="MySchedulerBean)
public class MySchedulerBean
private boolean cancelTimer = false;
public void stopDiscovery() {
this.cancelTimer = true;
}
@Schedule(persistent=false, minute="*/2", hour="*", timezone="GMT"
public void discover() {
if (cancelTimer) {
return;
}
//run discovery
}
}
В качестве альтернативы, вы можете отменить Timer, обрабатывающая работу. Это более постоянное решение; вы не сможете перезапустить этот запланированный EJB ... по крайней мере, нелегко. Это будет выглядеть следующим образом:
@Stateless(name="MySchedulerBean)
public class MySchedulerBean
private boolean cancelTimer = false;
public void stopDiscovery() {
this.cancelTimer = true;
}
@Schedule(persistent=false, minute="*/2", hour="*", timezone="GMT"
public void discover(Timer timer) {
if (cancelTimer) {
timer.cancel();
return;
}
//run discovery
}
}
Так что теперь, если вы решили остановить открытие, в следующий раз открытие пытается запустить таймер на этом компоненте будет отменен навсегда.