JBoss 7.1.1和EJB 3.1 Timer服务

use*_*731 5 quartz-scheduler ejb-3.1 jboss7.x

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

我一直在研究Timer服务如何持久化事物,它似乎使用了创建Timer的服务器的文件系统。这是真的?我不知道这怎么可能,因为它将不支持故障转移,从而使计时器服务不可用。

所以我一定想念一些东西。谁能帮我这个忙吗?

Mik*_*aun 2

EJB 计时器服务根本就没有 Quartz 先进(不管有没有 Spring)。

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

关于这一点,EJB 规范 JIRA 上有一段时间存在一个关于此问题的问题,并且在规范邮件列表上进行了讨论,但随后它被残酷地删除并关闭,因为没有人愿意回复任何人(可能是因为很多人都在度假)当时)。如果你问我的话,这是关闭问题的最蹩脚的理由之一,但我想规范负责人有时必须诉诸此类措施。

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