我有一个运行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;
}
但是,我得到一个例外:
java.lang.IllegalStateException:WFLYEJB0325:无法调用计时器 生命周期中非单例bean回调的服务方法
这是堆栈跟踪中的最后一个异常(最后一次引发)。
我似乎无法理解这是什么意思。我试过谷歌搜索但没有出现。
答案 0 :(得分:2)
您使用的是javax.ejb.Singleton
还是javax.inject.Singleton
?确保您使用的是javax.ejb.Singleton
。
你也可以使用例如SingleActionTimer
并将其指定为非持久性:
TimerConfig tc = new TimerConfig(null, false);
timerService.createSingleActionTimer(new Date(), tc);