2013-03-20 53 views
4

我確信這個問題已被問過無數次,但我已經嘗試了所有我讀過的東西,似乎沒有任何工作。我相信這個解決方案可能也很簡單。Java EE 6 @Startup和@Schedule永遠不會被執行

我有以下單例,它應該在Web應用程序啓動時執行,但它不會,並且計劃任務也不會運行。

@Singleton 
@Startup 
public class Scheduler { 

    private static int count = 0; 

    @PostConstruct 
    public void onStartup() { 
     System.out.println("Initialization success."); 
    } 

    @Schedule(second="*/10", minute="*", hour="*") 
    public void execute() { 
     System.out.println("its running count..."+count); 
     count++; 
    } 
} 

我正在使用Glassfish服務器3.1.2。

任何幫助將不勝感激。

謝謝。目前正在執行

編輯

啓動方法,但該方法的時間表不運行。

+0

,你能否告訴了辛格爾頓註釋進口? – perissf 2013-03-20 10:36:04

+1

嗨。它是:import javax.ejb.Singleton; – 2013-03-20 10:40:05

+0

您是否在(重新)部署期間看到GlassFish中的任何錯誤/日誌? – perissf 2013-03-20 10:45:09

回答

5

添加另一種答案,因爲在上Boreded自己回答一些問題。

之所以設置persistence=false解決的問題可能是由於該持久性計時器不重新創建如果當keepstate設置爲true已經存在。

你應該看到日誌

INFO: keepstate is true and will not create new auto timers during deployment. 

在下面我想我的答案here(連同羅蘭Tiefenbrunner對同一個問題的答案)覆蓋問題有些很好。

+0

不。通常情況下,定時器的調用時keepstate是true和false,持久true和false。 – perissf 2013-03-20 19:42:27

+0

在相關問題中給出的其他答案似乎是合理的。在GF啓動期間你會得到任何德比錯誤嗎? – perissf 2013-03-20 19:52:13

+0

那麼確定定時器仍然會啓動,但我認爲這裏發生的是第一個沒有跟蹤的定時器被部署。因此,稍後更改定時器以包含輸出跟蹤時,它不會被部署。更改保持狀態或使計時器非持久性重新部署新計時器。 – 2013-03-20 20:07:29

1

爲別人有類似的問題,添加以下固定我的問題:

persistent=false 

所以我的日程表註釋現在是

@Schedule(second="*/10", minute="*", hour="*", persistent=false) 
+7

該問題中暴露的代碼運行良好,但未將持久性= false。如果這個解決方案真的解決了這個問題,那麼它意外地隱藏了你真正的問題。 – perissf 2013-03-20 17:35:59

4

我的問題是,我使用了錯誤的Singleton類,而不是javax.inject.Singletonjavax.ejb.Singleton

+0

我現在有完全相同的問題,它讓我瘋狂,直到我意識到導入了錯誤的Singleton註釋。 – 2016-04-06 10:52:54

+0

它應該是兩個類中的哪一個? – 2018-01-24 11:14:43