在weblogic服务器的热重新部署期间,EJB @Timeout方法被多次调用

问题描述 投票:0回答:1

我们有以下简单的应用程序:一个带有@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方法。目前,方法在一秒钟内被多次调用。

java timer timeout ejb
1个回答
0
投票

定时器默认是持久的,根本不会被取消。

请参考官方Java EE6 Tutorial: Using the Timer Service

如果你不需要定时器来持久,则更喜欢使用@Schedule并设置persistent=false。或者尝试以自己的方式控制计时器生命周期的程序化方法。

© www.soinside.com 2019 - 2024. All rights reserved.