如何停止无尽的EJB 3计时器?

2022-09-02 20:16:43

我是 EJB 3 的新手。我使用以下代码启动无尽的EJB 3计时器,然后将其部署到JBOSS 4.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);

它运行良好。我创建了一个客户端类,该类调用一个创建计时器的方法和一个在计时器超时时调用的方法。

我忘记调用取消,然后它不会停止.redeploy与取消调用永远不会停止它。重新启动 Jboss 4.2.3 永远不会停止它。如何停止 EJB 计时器?感谢您的帮助。


答案 1
    public void stop(String timerName) {
    for(Object obj : timerService.getTimers()) {
        Timer t = (Timer)obj;
        if (t.getInfo().equals(timerName)) {
        t.cancel();
        }
    }
}

答案 2

我在JBoss AS 6.1上遇到了同样的问题。
在杀死这个无休止的(持久的)计时器之后,我找到了以下解决方案来避免将来出现此问题:
使用JBoss AS 6.1(EJB 3.1),可以创建非持久性自动计时器,它们无法在服务器重新启动后存活:

@Schedule(minute=”*/10”, hour=”*”, persistent=false)
public void automaticTimeout () {