问题描述
我们有以下简单的应用程序:一个具有@Timeout方法的@Singleton bean和一个启动计时器的servlet。 第一次部署后,我们看到该方法每2秒调用一次-这是预期的。 然后,在热重新部署之后,我们看到该方法在2秒内被调用了两次。 经过几次重新部署后,在同一2秒钟内多次调用该方法。 重新启动服务器没有帮助。 请参见下面的代码:
import javax.ejb.*;
@Remote(TimerRemote.class)
@Singleton
public class TimerBean implements TimerRemote {
@Resource
private SessionContext context;
public void startTimer() {
context.getTimerService().createTimer(2000,2000,null);
}
@Timeout
public void timeoutCallback(javax.ejb.Timer timer) {
System.out.println("timeoutCallback is called: " + timer);
}
}
在给定的间隔时间之后,应调用@Timeout方法。 当前方法在一秒钟内被多次调用。
1楼
默认情况下,该计时器是永久性的,并且根本不会取消。
请参考官方的 。
如果您不需要计时器是持久的,则最好使用@Schedule
并设置persistent=false
。
或尝试以编程方式自行控制计时器的生命周期。