Jakarta ee 吉:不同的间隔计时器
我想要一个javax.ejb.Timer,它在每次超时执行之后,在下一次超时发生之前,等待一个不同的间隔。为此,我有以下EJB: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
@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计时器的正确方法是什么?它在超时执行之间有不同的间隔