我想知道Ejb计时器服务如何计算超时?它是否需要系统时间,并根据它计算超时或内部是否有机制为自己运行计时器。如果它使用自己的机制是什么,我们可以进行一些设置,以便它可以根据系统时间计算超时?
我搜索了这些信息并没有找到任何相关的信息。我目前在我的代码中使用TimerService并以编程方式创建了计时器。但是当我改变系统时间时,计时器确实可以正常工作。在创建计时器的计时时间之后发生超时。
如果我不改变系统时间,那么调度程序工作得非常好..
即使您可以将我重定向到任何此类信息,这将是gr8帮助。
任何帮助都会非常贴切。
代码就像这样
ScheduleExpression everyDayAtTenTwenty = new ScheduleExpression();
TimerConfig timerConfig = new TimerConfig();
timerConfig.setPersistent(false);
timerConfig.setInfo("testTask");
everyDayAtTenTwenty.start(date).year("2011,2012").month("Jun").dayOfMonth("19").dayOfWeek("*").hour("16-23").minute("30"); timerConfig.setInfo("testTask : ");
timerKeeperBeanLocal.scheduleTimer(everyDayAtTenTwenty, timerConfig);
timerKeeperBeanLocal implementation
@Resource
private TimerService timerService;
Timer timer = this.timerService.createCalendarTimer(scheduleExpression, timerConfig);
现在,我希望调度程序在2011年6月19日和2012年6月19日执行。现在,当前日期是2011年6月19日,所以今天它执行,同一天我将系统日期更改为2011年6月29日以及适当的时间。在这种情况下,调度程序不起作用。同样可以测试,改变是几个小时。 我是否需要根据系统时间执行其他操作。
提前致谢。
答案 0 :(得分:1)
Ejb计时器服务使用Java SE时间API,而后者又基于系统时间。参见
http://download.oracle.com/javase/6/docs/api/java/util/Date.html
这是EJB 3.1规范的引用:
虽然计时器持续时间以毫秒为单位表示,但这是 因为毫秒是时间粒度的单位 Java SE平台的API。