2016-03-24 7 views
0

У меня ниже запланированного компонента, который запускает метод обнаружения каждые две минуты.Остановить запланированную задачу EJB в Java EE

@Stateless(name="MySchedulerBean) 
public class MySchedulerBean  
    @Schedule(persistent=false, minute="*/2", hour="*", timezone="GMT" 
    public void discover(){ 
      //run discovery every 2 minute 
    } 
} 

Проблема с вышеуказанным подходом заключается в том, что он работает вечно. Есть ли способ остановить метод, чтобы ударить, как только мое открытие будет сделано? Можно ли условно запустить/остановить?

ответ

2

Два подхода: вы можете просто задать логическое значение для вашего 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 
    } 
} 

Так что теперь, если вы решили остановить открытие, в следующий раз открытие пытается запустить таймер на этом компоненте будет отменен навсегда.

 Смежные вопросы

  • Нет связанных вопросов^_^