2015-01-11 5 views
0

Мои настройки: NetBeans 8.0.2 JEE7 с EJB3.2 работает на Glassfish 4,2Отменить TimerService начал с @Schedule

Привет, я начал службу таймера

@Schedule(second = "*/10", minute = "*", hour = "*", persistent = false) 
public void chronJobSySODate() { 
    System.out.println("Timer event: " + new Date()); 

} 

я назвал этот метод другой Bean с @PostConstruct Аннотация

@PostConstruct 
public void startChronJob(){ 
    chronJobBean.chronJobSySODate(); 
} 

Теперь несмотря на то что я, хотя из-за persistent = false таймер будет б e ушел после убийства Glassfish, он все еще присутствует даже в другом проекте NetBeans, запущенном на том же сервере Glassfish.

я уже смотрел на эту StackOverflow тему Is there a way to stop/re-start ejb 3.1 automatic timer during runtime?

Так что я попытался

import javax.annotation.Resource; 
import javax.ejb.TimerService; 

    @Resource 
    TimerService timerService; 

    public void cancelAllTimers() { 

     System.out.println("cancelAllTimers"); 

     for (Timer timer : timerService.getTimers()) { 

      System.out.println("Canceling Timer: info: " + timer.getInfo()); 
      timer.cancel(); 

     } 
    } 

Но в отношении к переменной timerService нет таймеров (но таймер до запуска.

ответ

0

я не знаю, решает ли это вашу проблему, но так как мне еще не разрешено прокомментировать (< 50 rep) Я пишу это в качестве ответа:

Вы должны опустить вызов своего таймера в PostConstruct. Методы, аннотированные @ Расписание выполняются контейнером без дальнейшей регистрации. Поскольку вы не размещали остальную часть своего «вызывающего» класса, я должен угадать: Если это EJB, отмеченный как @Startup или используемый иначе, ваш метод таймера будет вызываться, даже если нет активного таймера.