我有一个运行Wildfly 10.1 Final的Java EE项目。
我正在使用这样的javax.ejb.TimerService
以编程方式创建一些计时器:
timerService.createTimer(new Date(), null);
现在,我正在尝试在下次部署项目时取消这些计时器,因为每次我重新部署项目或重新启动服务器时,它们仍然存在。
我尝试为此使用Singleton
Startup
豆,如下所示:
@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);