Java EJB定时器可靠性

Java EJB定时器可靠性,java,quartz-scheduler,openejb,Java,Quartz Scheduler,Openejb,我使用openejb@Resource TimerService(我认为它注入了org.apache.openejb.core.timer.TimerServiceImpl)将周期性任务设置为每秒 timerService.createCalendarTimer(new ScheduleExpression() .hour("*"), .minute("

我使用openejb
@Resource TimerService
(我认为它注入了
org.apache.openejb.core.timer.TimerServiceImpl
)将周期性任务设置为每秒

timerService.createCalendarTimer(new ScheduleExpression()
                                    .hour("*"),
                                    .minute("*"),
                                    .second("1"),
                                    new TimerConfig("timerName",false)
                                    );
最初,超时几乎每秒都会发生,但随着时间的推移,可靠性会下降,几天后,通话之间的延迟看起来像这样:

    delta [seconds]     number of occurences
    ----------------------------------------------
    0                   18057
    1                   35084
    2                   2509
    3                   4668
    4                   1869
    5                   2093
    6                   632
    7                   376
    8                   697
    9                   93
    10                  6
    11                  3
    15                  2
    16                  1
    18                  1
    19                  1
    20                  3
    22                  2
    25                  2
    26                  2
    31                  2
    33                  1
    34                  1
    38                  1
调用的函数没有阻塞,我没有得到任何“UnabletoQuillock”异常


如何确保函数的两次连续调用之间的间隔不超过两秒钟?

关于用法的几个问题:1。企业bean通常在事务中创建计时器。如果回滚此事务,则计时器创建也将回滚。类似地,如果bean在回滚的事务中取消计时器,则计时器取消将回滚。在这种情况下,计时器的持续时间被重置,就好像从未发生过取消一样。你能检查一下这个吗。您是否使用一个带有超时注释的方法的调度bean?3.你能考虑使用一个简单的计时器使用TimeService?CuraTimeTo(…)而不是TimeService吗?CealCaleAdEnTrime2(参见REF),你可以发布完整的示例代码吗?