JBoss 7.1.1和EJB 3.1定时服务

时间:2012-10-17 12:36:22

标签: quartz-scheduler jboss7.x ejb-3.1

我正在考虑将基于Spring Quartz的应用程序移植到EJB 3.1以查看EJB是否已经改进。我在理解故障转移如何与Schedule Timer Service一起工作时遇到问题。在Quartz中,有几个Quartz实例使用的数据库表。如果群集中的一个节点崩溃,作业仍将在其他节点上执行。

我一直在研究Timer Service如何持久化,它似乎使用了创建Timer的服务器的文件系统。这是真的?我不明白这是怎么可能的,因为它会使Timer Service无法使用,因为它不支持故障转移。

所以我必须遗漏一些东西。任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

EJB计时器服务不像Quartz那样先进(有或没有Spring)。

EJB计时器持久保存到未知位置。它可能恰好是文件系统,但如果您恰好在Windows上运行,它也可能是Windows注册表,或者它可能是LDAP服务器或其他任何东西。

关于这个问题,EJB规范JIRA上存在一个问题,并且在规范邮件列表中对它进行了讨论,然后它被残酷地删除并关闭,因为没有人愿意回复任何人(也许是因为很多人当时正在度假)。如果你问我,这是关闭问题的最蹩脚的理由之一,但我想规范领导有时必须采取这样的措施。

无论如何,在JBoss AS中,持久化发生在嵌入式关系数据源上,而后者又会写入文件系统。通过propriatat配置,您可以将此数据源指向任何远程DB。故障转移也必须来自专有的JBoss功能。虽然EJB为了潜在的集群而禁止许多事情,但规范中没有明确的集群支持,因此具体的EJB计时器不支持集群。

答案 1 :(得分:0)

在问题发生时不确定这是否可用,但是您可以使用'cluster-ha-singleton',它允许您创建从单个群集节点调用的单例计时器,如果是所选节点的故障转移选择新节点来运行单例(以及计时器)

http://www.jboss.org/quickstarts/eap/cluster-ha-singleton/

它提到了EAP但是我在AS 7.2.0上运行很好,这些罐已经包含在/ modules / org / jboss /