2011-12-30 50 views
3

我在EJB 3中使用了定時器。我有以下要求來完成。例如:假設我創建了一個有效期限爲10分鐘的計時器,初始計時器開始工作,並且正在執行一些需要更多時間(比如15分鐘)的任務。同時服務器將啓動具有相同名稱的另一個計時器,並且到期時間已到。如果現有計時器仍在運行,我想限制服務器啓動另一個計時器。如何在EJB 3中創建同步定時器?

另外我想停止所有計時器,但是當我使用timer.getInfo()並獲取計時器的名稱時,應用程序將掛起。

請幫忙解決這個問題。

+1

你應該發佈一些代碼。這將顯着幫助人們幫助你! – jbranchaud 2011-12-30 05:14:53

回答

2

你創建的東西看起來像是一個間隔定時器/調度器,它在一定的時間間隔後繼續執行,而不管先前的操作如何。

嘗試手動創建定時器,在標記爲@Startup的bean中創建它,並使用應用程序啓動進行初始化,可以進一步參考here

//--- 

    @Timeout 
    public void execute(Timer timer){ 

     /* 
      -- Time consuming computation 
     */ 

     createTimer(sec, min, hour) 
    } 

//--- 

因此,一旦它在應用程序啓動時創建,它將創建一個定時器鏈。所以即使你的任務需要比平常更多的時間,下一個只會在前一個定時器完成/到期之後纔會創建。