Отмена TimerService запущена с @Schedule

Моя установка: NetBeans 8.0.2 JEE7 с EJB3.2, работающим на Glassfish 4.2

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

@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 таймер исчезнет после убийства Glassfish, он все еще существует даже в другом проекте NetBeans, работающем на том же сервере Glassfish.

Я уже просмотрел этот поток StackOverflow Есть ли способ остановить/перезапустить автоматический таймер ejb 3.1 во время выполнения?

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

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, таймеров нет (но таймер пока работает.


person Viktor Carlson    schedule 11.01.2015    source источник


Ответы (1)


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

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

person Dominik Schlosser    schedule 14.01.2015