Jakarta ee 吉:不同的间隔计时器

Jakarta ee 吉:不同的间隔计时器,jakarta-ee,timer,java-ee-6,Jakarta Ee,Timer,Java Ee 6,我想要一个javax.ejb.Timer,它在每次超时执行之后,在下一次超时发生之前,等待一个不同的间隔。为此,我有以下EJB: @Singleton @LocalBean public class MyTimerServiceBean { @Resource private TimerService timerSvc; ... @Timeout public void executeTimer(Timer timer) { int waitSec = do

我想要一个javax.ejb.Timer,它在每次超时执行之后,在下一次超时发生之前,等待一个不同的间隔。为此,我有以下EJB:

@Singleton
@LocalBean
public class MyTimerServiceBean {

  @Resource
  private TimerService timerSvc;

  ...
  
  @Timeout
  public void executeTimer(Timer timer) {
    int waitSec = doSomthing(); // returns the second to wait before next execution

    triggerTimerIn(waitSec);
  }

  private void triggerTimerIn(int waitSec) {
    if (timerSvc != null) {
      for (Timer timer : timerSvc.getTimers()) {
         timer.cancel();
      }
    }

    log.debug("Next Execution in " + waitSec + " secs!");

    timerSvc.createSingleActionTimer(waitSecs * 1000, new TimerConfig("Next timer execution", false));
  }
}
一旦计时器启动,它就会像预期的那样工作。但几个小时后,Java堆中有超过50万个TimerImpl实例。似乎是TimerService不释放Timer对象

使用EJB计时器的正确方法是什么?它在超时执行之间有不同的间隔