在单例 Bean 的生命周期回调中取消计时器



我有一个运行Wildfly 10.1 Final的Java EE项目。

我正在使用这样的javax.ejb.TimerService以编程方式创建一些计时器:

timerService.createTimer(new Date(), null);

现在,我正在尝试在下次部署项目时取消这些计时器,因为每次我重新部署项目或重新启动服务器时,它们仍然存在。

我尝试为此使用SingletonStartup豆,如下所示:

@Startup
@Singleton
public class TimerKiller {
@PostConstruct
public void killTimers() {
timerService.getAllTimers().forEach(timer -> timer.cancel());
}
@Resource
TimerService timerService;
}

但是,我有一个例外:

java.lang.IllegalStateException: WFLYEJB0325: 无法调用计时器 非单例 Bean 生命周期回调中的服务方法

这是堆栈跟踪中的最后一个异常(最后一个由"导致"异常)。

我似乎不明白这是什么意思。我尝试谷歌搜索,但没有任何结果。

你用的是javax.ejb.Singleton还是javax.inject.Singleton.确保您使用的是javax.ejb.Singleton.

您也可以使用例如SingleActionTimer并将其指定为非持久性:

TimerConfig tc = new TimerConfig(null, false);
timerService.createSingleActionTimer(new Date(), tc);

最新更新