Метод EJB @Timeout вызывается несколько раз во время горячего повторного развертывания на сервере weblogic. - PullRequest
0 голосов
/ 19 февраля 2019

У нас есть следующее простое приложение: один бин @Singleton с методом @Timeout и один сервлет, который запускает таймер.После первого развертывания мы видим, что метод вызывается один раз в 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);
  }
}

@ Метод тайм-аута должен вызываться после заданного интервала времени.В настоящее время метод вызывается несколько раз в течение секунды.

1 Ответ

0 голосов
/ 20 февраля 2019

Таймер является постоянным по умолчанию и не отменяется вообще.

Пожалуйста, обратитесь к официальному Учебному пособию по Java EE6: Использование службы таймера .

Предпочитают использовать@Schedule и установите persistent=false, если вам не нужен постоянный таймер.Или попробуйте программный подход, управляющий жизненным циклом таймера самостоятельно.

...