在WebLogic Server的热重新部署期间,EJB @TimeOut方法被多次调用



我们有以下简单的应用程序:一个@singleton bean,带有@TimeOut方法和一个启动计时器的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方法应在给定间隔时间后调用。当前方法在一秒钟内被多次调用。

计时器每个默认值持续存在,根本没有取消。

请参阅官方Java EE6教程:使用计时器服务。

如果您不需要计时器持久,则希望使用@Schedule并设置persistent=false。或尝试自行控制计时器生命周期的程序化方法。

相关内容

  • 没有找到相关文章

最新更新