2011-04-29 51 views
3

我用下面的註釋調用無狀態會話Bean一次5分鐘:@Schedule註釋

@Schedule(second = "0", minute = "0/5", hour = "*") 

我正常工作,但它幾天後停止本身。我猜可能有一個默認的生命週期,我不知道如何覆蓋它。

請幫我配置調度器無限期地運行。

+0

註解看起來是正確的(注意,second =「0」是默認值,不需要指定),並且不應該有最大生命週期。你在使用哪個應用程序服務器?日誌中是否有錯誤提示可能失敗?應用程序是否可以在自動創建的計時器上調用Timer.cancel? – 2011-04-29 22:37:37

+0

我使用Glassfish v3,並且在日誌中找不到錯誤。 – siva636 2011-04-30 02:26:31

回答

1

要知道您的對象是否有到期日期,您可以使用getTimers()返回該定時器的對象,然後使用此方法getTimeRemaining()來知道它是否有到期日期。

無論如何,你可以使用此批註@Timeout做一下超時的情況下發生的:

@Timeout 
public void timeout(Timer timer) { 
    System.out.println("do something ... "); 
} 

您可以在這裏打印日期知道什麼時候發生超時..

另一件事你使用「自動定時器」和它在ejb-jar.xml中配置,以便嘗試看看ejb-jar.xml中,看是否有到期日有..

0

在Glassfish配置下 - >服務器配置 - > EJB容器 - > EJB-Timeservice新屬性:reschedule-failed-timer = true

0

你的@Schedule註釋看起來是正確的,所以你應該檢查的第一件事是日誌並查看您的計劃方法是否有例外。

根據規範,如果在Timer方法內引發異常,該方法將被再次調用,如果再次失敗,則關閉計時器。