2011-11-04 153 views
1

我想知道Ejb计时器服务如何计算超时?是否需要系统时间并取决于它计算超时时间还是内部有机制来运行自己的计时器。如果它使用它自己的机制,它是什么,我们可以做一些设置,以便它可以根据系统时间计算超时时间?ejb 3.1计时器服务如何计算超时时间?

我已经搜索了这些信息,并没有发现任何相关的信息。我目前在我的代码中使用了TimerService并以编程的方式创建了定时器。但是当我改变系统时间时,定时器按照这个方式工作。计时器创建后的步进时间后发生超时。

如果我不更改系统时间,则调度工作完全正常..

即使ü可以重定向我任何此类信息,这将是GR8帮助。

任何帮助将真正appriciated。

的代码是这样

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); 

现在在这里我要调度执行19 2011年6月和2012年现在目前的日期是2011年6月19所以今天就执行,并在同一天我将系统日期与适当的时间一起更改为2011年6月29日。在这种情况下,调度程序不起作用。同样的情况可以在几个小时内进行测试。 我是否需要按照系统时间去做其他事情?

在此先感谢。

回答

1

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

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

这是从EJB 3.1规格报价:

虽然计时器的持续时间是在毫秒单位表示,这是 因为毫秒是时间粒度的由所使用的单元Java SE平台的API。

+0

我的问题是,一旦定时器被创建,并且在那之后如果系统日期时间被改变,那么同样的情况也反映在已经创建的定时器中。 感谢您的答复:) – khushi

+0

是的,更改系统日期将影响当前创建的计时器。 – dcernahoschi

+0

在我的情况下,它不是以这种方式使用EJB 3.1 Timer Service – khushi