ejb 3.1计时器服务如何计算超时?

时间:2011-11-04 12:14:03

标签: java timer ejb

我想知道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日以及适当的时间。在这种情况下,调度程序不起作用。同样可以测试,改变是几个小时。 我是否需要根据系统时间执行其他操作。

提前致谢。

1 个答案:

答案 0 :(得分:1)

Ejb计时器服务使用Java SE时间API,而后者又基于系统时间。参见

http://download.oracle.com/javase/6/docs/api/java/util/Date.html

这是EJB 3.1规范的引用:

  

虽然计时器持续时间以毫秒为单位表示,但这是   因为毫秒是时间粒度的单位   Java SE平台的API。