JSR-000318 spec定義了TimerService(第18章)。如何爲同一個EJB @Timeout方法創建多個觸發器?
給定一個EJB,您可以創建一個自動計時器或編程計時器。
的自動定時器看起來像這樣
@Schedules(
{
@Schedule(hour=」12」, dayOfWeek=」Mon-Thu」),
@Schedule(hour=」11」, dayOfWeek=」Fri」)
})
public void sendLunchNotification() { ... }
雖然編程定時器看起來像這樣
@Resource
private TimerService timerService;
void someMethod(){
ScheduleExpression exp = new ScheduleExpression();
(... set exp ...)
TimerConfig config = new TimerConfig();
(... set config ...)
Timer created = timerService.createCalendarTimer(exp,config);
}
當創建一個編程定時器,任務被觸發該計時器是用@Timeout註解的一個計時器
我的問題,因爲我找不到它在JSR明確指出,如果建立2個編程定時器使用相同ScheduleExpression同一個EJB時,容器必須調用@Timeout方法兩次或一次?
爲了讓我的問題更清楚。
讓我們假設我已經創建了2個編程定時器。每個人都有不同的元數據(存儲在可序列化的定時器INFO屬性中)。然後,我想要有兩個不同的計時器,並且@Timeout方法執行時,它將獲得此INFO屬性來選擇要執行的操作。
如果我的問題的答案是兩倍,比我能做到。如果我的問題的答案是一次,那麼我不能。
請注意,如果回答是一次,從性能的角度來看,從某種意義上講,實際上不需要多次通知EJB,即使您有多個觸發器對於它來說,但是如果你打算獨立處理這些觸發器(因爲每個觸發器都有一個不同的INFO),那麼當有人持續存在時,有人會忽略創建定時器的嘗試。
這就是我想過了,但是這不是TomEE +是如何實現的阿帕奇看到 – Leo 2014-10-21 09:32:51
http://qnalist.com/questions/5209032/cluster-schedule – Leo 2014-10-21 09:36:13
他們聲明「規範在持久化方面沒有說/強制任何東西」 – Leo 2014-10-21 09:37:39