2013-05-14 65 views
0

我有一個單獨的EJB bean,它具有一個每分鐘一次將統計數據保存到數據庫的定時方法。該bean在每個羣集節點上分別保存統計信息,因此將它保存在每個節點上也很重要。爲什麼必須EJB定時器在集羣中共享數據庫連接?

我的問題是,由於EJB Timer服務共享數據庫,它只會在其中一個羣集節點上運行save-method,而不是全部運行它們。這意味着並非所有的統計數據都保存在數據庫中。文檔http://docs.oracle.com/cd/E18930_01/html/821-2418/beahw.html似乎沒有提及任何內容。

任何人都知道它是如何工作的?

+0

我想你可以使用@ Singleton + @ Startup,因爲它們是每個節點。然後在beans中實際創建定時器@PostConstruct – 2013-05-14 08:37:20

+0

現在我的bean有'@Singleton',而我的save方法有'@PreDestroy + @Schedule(minute =「*/1」,hour =「*」)''。我不確定你的意思,但我擔心save方法只能在一個羣集節點上運行每個minut,而不是在每個節點上運行。 – 2013-05-14 08:56:54

+0

我在這裏找到了答案:http://stackoverflow.com/questions/14472689/glassfish-clustering-ejb-lookup – 2013-05-14 12:26:36

回答

1

如果您使用@Schedule(...,persistent = true)聲明計時器,您將獲得存儲在計時器db(可以遷移)中的羣集計時器,因此它將只在一個節點中運行。

如果您使用@Schedule(...,persistent = false)聲明計時器,您將得到一個未存儲在計時器db中的節點計時器(不能被遷移),所以它將在每個節點。

相關問題