我有一个无状态的EJB 3.0版本运行,应该每30秒触发一次。我的问题是,在我运行之后,无论我做什么,它总是会运行4个活动计时器(在我的WebLogic控制台中验证)大约每2秒左右一次。
可悲的是,我的代码不能超级具体,但这就是我所拥有的:
任何建议都将不胜感激。我想我不完全了解发生了什么,但我找不到任何有用的东西。
答案 0 :(得分:1)
在EJB 3.0中,所有计时器都是持久的。换句话说,它们可以在服务器重启后继续存在。
如果您创建间隔计时器,它将一直运行,直到您取消它。停止服务器不会取消它。已知许多实现在重新启动服务器时尝试再次赶上。
现有代码在重新启动时会创建另一个计时器。
考虑将以下内容添加到为Timer提供服务的EJB中的@PostConstruct方法:
@Resource
private TimerService timerService;
@PostConstruct
void startup() {
...
for (Timer timer: timerService.getTimers()) {
timer.cancel();
}
...
}
这应该为你清理。