2013-05-14 31 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中的节点计时器(不能被迁移),所以它将在每个节点。

相关问题