首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消单例bean生命周期回调中的计时器

取消单例bean生命周期回调中的计时器
EN

Stack Overflow用户
提问于 2018-01-18 01:08:30
回答 1查看 460关注 0票数 2

我有一个Java项目运行Wildfli10.1 Final。

我正在以编程方式使用javax.ejb.TimerService创建一些计时器,如下所示:

代码语言:javascript
复制
timerService.createTimer(new Date(), null);

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

为此,我尝试使用Singleton Startup bean,如下所示:

代码语言:javascript
复制
@Startup
@Singleton
public class TimerKiller {

    @PostConstruct
    public void killTimers() {
        timerService.getAllTimers().forEach(timer -> timer.cancel());
    }

    @Resource
    TimerService timerService;
}

但是,我有个例外:

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

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

我似乎不明白这是什么意思。我试过在谷歌上搜索,但没什么结果。

EN

回答 1

Stack Overflow用户

发布于 2018-01-18 07:24:10

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

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

代码语言:javascript
复制
TimerConfig tc = new TimerConfig(null, false);
timerService.createSingleActionTimer(new Date(), tc);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48312400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档