取消TimerService以@Schedule开头

时间:2015-01-11 21:25:56

标签: java-ee timer ejb

我的设置: NetBeans 8.0.2 在Glassfish 4.2上运行EJB3.2的JEE7

嗨,我开始了一个计时器服务

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

}

我使用@PostConstruct Annotation

在另一个Bean中调用了此方法
@PostConstruct
public void startChronJob(){
    chronJobBean.chronJobSySODate();
}

尽管如此,由于persistent = false因为{@ 1}}计时器在杀死Glassfish后会消失,所以即使在同一Glassfish服务器上运行的其他NetBeans项目中,它仍然存在。

我已经查看了这个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变量,没有定时器(但定时器直到运行。

1 个答案:

答案 0 :(得分:0)

我不知道这是否能解决您的问题,但由于我尚未被允许发表评论(< 50 rep),我将此作为答案发布:

你应该在PostConstruct中省略对timer-method的调用。 使用 @Schedule 注释的方法由容器执行,无需进一步注册。 既然你没有发布你的"来电者" -class的其他部分,我必须猜测: 如果它是标记为 @Startup 的EJB,否则即使没有活动计时器也会调用您的计时器方法。