2012-10-17 42 views
4

我在考虑将基于Spring Quartz的应用程序移植到EJB 3.1以查看EJB是否得到了改进。我在理解如何使用计时器定时器服务进行故障转移时遇到问题。在Quartz中,有一些Quartz实例使用的数据库表。如果群集中的一个节点崩溃,则作业仍然会在其他节点上执行。JBoss 7.1.1和EJB 3.1计时器服务

我一直在看计时器服务如何保持东西,它似乎使用服务器的文件系统的定时器创建。这是真的?我不明白这是如何实现的,因为它会导致定时器服务不可用,因为它不支持故障转移。

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

回答

2

EJB定时器服务简直没有Quartz那样先进(有或没有Spring)。

EJB定时器被持久化到一个未知的位置。它可能恰好是文件系统,但如果您恰好在Windows上运行,或者它可能是LDAP服务器或其他任何设备,它也可能是Windows注册表。

有一段时间EJB规范JIRA存在一个问题,它在规范邮件列表中讨论过,但之后它被残忍地丢弃和关闭,因为没有人打扰回复任何人(可能是因为很多当时人们正在度假)。如果你问我,这是解决问题最蹩脚的原因之一,但我认为规范领导者有时必须诉诸这些措施。

无论如何,在JBoss AS中,持久化发生在一个嵌入式关系数据源中,它依次写入文件系统。通过propriatary配置,您可以将此数据源指向任何远程数据库。故障转移必须来自专有的JBoss功能。尽管EJB为了潜在的集群而禁止了很多事情,但规范中并没有明确的集群支持,因此EJB定时器并不是集群感知的。

+0

感谢您的回复Mike。定时器服务如此简陋并且缺乏关键功能(如故障转移支持),这很奇怪。我想我会从JEE使用Quartz,并看看如何在JEE中复制代码在Spring中执行的操作。 – user671731

0

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

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

它提到EAP但我AS 7.2.0精上运行,罐子已经包括在/ modules/org/jboss/