如何停止无休止的EJB 3计时器?
问题描述:
我是EJB 3的新手。我用下面的代码,即可开始无休止的EJB 3定时器 然后部署它在JBoss 4.2.3如何停止无休止的EJB 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);
它运作良好。我创建了一个客户端类,它调用一个创建定时器的方法和一个在定时器超时时调用的方法。
我忘记调用取消 然后它不停止.redeploy与取消调用永远不会停止它。重新启动Jboss 4.2.3永远不要停止它。我怎样才能停止EJB计时器? 感谢您的帮助。
答
public void stop(String timerName) {
for(Object obj : timerService.getTimers()) {
Timer t = (Timer)obj;
if (t.getInfo().equals(timerName)) {
t.cancel();
}
}
}
答
您也可以取消部署您的应用程序,这将“杀死”所有定时器。
答
我和我的JBoss AS 6.1有同样的问题。
杀死了这个无休止的(持久)定时器后,我发现了以下解决方案,以避免将来的 问题:
使用JBoss AS 6.1(EJB 3.1),可以创建非持久性自动定时器,它们不会生存服务器重启:
@Schedule(minute=”*/10”, hour=”*”, persistent=false)
public void automaticTimeout() {
答
另一种方法是用“信息”属性来创造醚:自动计时器(@Schedule),然后在定时器服务检查定时器,具有相同的信息,如果可用则取消:
@Schedule(hour="*", minute="*",second="3", persistent=false,info="AUTO_TIMER_0")
void automaticTimeOut(){
if(timerCount==0){System.out.println("FROM AUTOMATIC TIME OUT -----------------> CALLED");timerCount++;}
else{
Iterator<Timer> timerIterator=timerService.getTimers().iterator();
Timer timerToCancel=null;
while(timerIterator.hasNext()){
Timer tmpTimer=timerIterator.next();
if(tmpTimer.getInfo().equals("AUTO_TIMER_0")){timerToCancel=tmpTimer;break;}
}//while closing
if(timerToCancel!=null){
timerToCancel.cancel();
System.out.println("AUTOMATIC TIMER HAS BEEN CANCELED ----------------->>>>");
}//if closing
}//else closing
}//automaticTimeOut closing
答
尝试在要关闭的bean内的@PreDestroy
注释。
例如:
@PreDestroy
private void undeployTimer() {
//..
}
一般的资源去分配都是在这里完成。
答
自EJB 3.1以来,在TimerService
上有新的方法,其中采用TimerConfig
而不是Serializable
有效负载。使用TimerConfig
可以使Timer
为非持久性。
timerService.createIntervalTimer(10, 5000, new TimerConfig(null, false));
后三年前,非常感谢:) – mebada 2013-09-02 07:54:54
这将取消所有的计时器,但如果你查阅“getTimers()”,他们仍然存在:/ – jmlv21104 2014-03-14 14:32:33
不!这将只取消与'timerName'具有相同名称的定时器。 – 2015-01-21 16:45:12