我用下面的註釋調用無狀態會話Bean一次5分鐘:@Schedule註釋
@Schedule(second = "0", minute = "0/5", hour = "*")
我正常工作,但它幾天後停止本身。我猜可能有一個默認的生命週期,我不知道如何覆蓋它。
請幫我配置調度器無限期地運行。
我用下面的註釋調用無狀態會話Bean一次5分鐘:@Schedule註釋
@Schedule(second = "0", minute = "0/5", hour = "*")
我正常工作,但它幾天後停止本身。我猜可能有一個默認的生命週期,我不知道如何覆蓋它。
請幫我配置調度器無限期地運行。
要知道您的對象是否有到期日期,您可以使用getTimers()返回該定時器的對象,然後使用此方法getTimeRemaining()
來知道它是否有到期日期。
無論如何,你可以使用此批註@Timeout
做一下超時的情況下發生的:
@Timeout
public void timeout(Timer timer) {
System.out.println("do something ... ");
}
您可以在這裏打印日期知道什麼時候發生超時..
另一件事你使用「自動定時器」和它在ejb-jar.xml中配置,以便嘗試看看ejb-jar.xml中,看是否有到期日有..
在Glassfish配置下 - >服務器配置 - > EJB容器 - > EJB-Timeservice新屬性:reschedule-failed-timer = true
你的@Schedule註釋看起來是正確的,所以你應該檢查的第一件事是日誌並查看您的計劃方法是否有例外。
根據規範,如果在Timer方法內引發異常,該方法將被再次調用,如果再次失敗,則關閉計時器。
註解看起來是正確的(注意,second =「0」是默認值,不需要指定),並且不應該有最大生命週期。你在使用哪個應用程序服務器?日誌中是否有錯誤提示可能失敗?應用程序是否可以在自動創建的計時器上調用Timer.cancel? – 2011-04-29 22:37:37
我使用Glassfish v3,並且在日誌中找不到錯誤。 – siva636 2011-04-30 02:26:31