2011-11-04 146 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