java如何停止无尽的EJB3计时器?
我是EJB3新手。我使用以下代码来启动无尽的EJB3计时器 然后在JBoss4.2.3上部署它
@Stateless
public class SimpleBean implements SimpleBeanRemote,TimerService {
@Resource
TimerService timerService;
private Timer timer ;
@Timeout
public void timeout(Timer timer) {
System.out.println("Hello EJB");
}
}
那么叫它
timer = timerService.createTimer(10, 5000, null);
它工作得很好。我创建了一个客户端类,它调用一个创建计时器的方法,以及一个在计时器超时时调用的方法
我忘了打电话取消 然后它不会停止。使用取消呼叫重新部署永不停止。重新启动Jboss 4.2.3永远不要停止它。如何停止EJB计时器? 谢谢你的帮助
# 1 楼答案
您还可以取消部署应用程序,这将“杀死”所有计时器
# 2 楼答案
# 3 楼答案
自从EJB3.1以来,在
TimerService
上出现了一些新方法,它们采用TimerConfig
而不是Serializable
负载。使用TimerConfig
可以使Timer
非持久化# 4 楼答案
我也有同样的问题,我的JBoss是6.1
在杀死这个无止境(持久)计时器之后,我找到了以下解决方案来避免这种情况 未来的问题:
使用JBoss AS 6.1(EJB 3.1)可以创建非持久性自动计时器,但它们在服务器重启后无法生存:
# 5 楼答案
另一种方法是创建具有“info”属性的自动计时器(@Schedule),然后在计时器服务中检查具有相同信息的计时器,如果可用,则取消:
# 6 楼答案
在要关闭的bean中尝试
@PreDestroy
注释例如:
通常,资源取消分配在这里完成