我有一个运行 Wildfly 10.1 Final 的 Java EE 项目。
我正在使用 javax.ejb.TimerService
以编程方式创建一些计时器,如下所示:
timerService.createTimer(new Date(), null);
现在,我试图在下次部署项目时取消这些计时器,因为每次我重新部署项目或重新启动服务器时它们仍然存在。
我尝试使用 Singleton
Startup
bean 来实现此目的,如下所示:
@Startup
@Singleton
public class TimerKiller {
@PostConstruct
public void killTimers() {
timerService.getAllTimers().forEach(timer -> timer.cancel());
}
@Resource
TimerService timerService;
}
但是,我遇到了一个异常(exception):
java.lang.IllegalStateException: WFLYEJB0325: Cannot invoke timer service methods in lifecycle callback of non-singleton beans
这是堆栈跟踪中的最后一个异常(最后一个引起的异常)。
我似乎不明白这是什么意思。我尝试用谷歌搜索但没有任何结果。
最佳答案
您使用的是javax.ejb.Singleton
还是javax.inject.Singleton
。确保您使用的是javax.ejb.Singleton
。
您还可以使用例如SingleActionTimer
并将其指定为非持久性:
TimerConfig tc = new TimerConfig(null, false);
timerService.createSingleActionTimer(new Date(), tc);
关于java - 在单例bean的生命周期回调中取消计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48312400/