EJB3 + JEE6:啥是持久定时器?

Posted

技术标签:

【中文标题】EJB3 + JEE6:啥是持久定时器?【英文标题】:EJB3 + JEE6: What is a persistent Timer?EJB3 + JEE6:什么是持久定时器? 【发布时间】:2011-02-10 00:48:36 【问题描述】:

我即将使用新的 EJB3 TimerService(作为 Java EE 6 的一部分),而且像往常一样,JavaDoc 的简洁性给我留下了深刻的印象:)

你知道TimerConfig对象的persistent属性有什么作用吗?

JavaDoc TimerConfig 说:持久性属性确定相应的计时器是否具有跨越创建它的 JVM 的生命周期。它是可选的,默认为 true。

【问题讨论】:

【参考方案1】:

persistent 属性意味着容器需要将计时器状态持久化到数据库中。如果您需要保证即使服务器离线(有意或崩溃)也能触发计时器,这一点很重要。当服务器重新上线时,需要执行错过的计时器。将计时器设置为持久性还具有确保计时器仅在一个服务器 JVM(但不一定是创建它的那个)中执行的副作用,无论这对您的产品意味着什么。例如,在集群服务器环境中,这通常意味着即使 EJB 模块在 3 个 JVM 上运行,也只有一个 JVM 会执行计时器。

persistent=true 是 EJB 3.1 之前唯一可用的选项。一些计时器操作不够关键,无法保证这种级别的可靠性,因此添加了允许非持久计时器的选项。将计时器设置为非持久性还具有确保它在创建它的 JVM 中运行的副作用。这对于更新内存缓存或静态 html 很有用。

【讨论】:

所以一般来说拥有它true 是一个好主意。这是默认的 “将计时器状态保存到数据库” - 你能解释一下计时器保存到哪个数据库吗?如果我不使用任何数据库,计时器会被保存吗? @AntonSorokin 答案是特定于供应商的。我建议创建一个关于您的特定供应商的新问题。

以上是关于EJB3 + JEE6:啥是持久定时器?的主要内容,如果未能解决你的问题,请参考以下文章

如何停止无尽的 EJB 3 计时器?

STM32的APB时钟预分频数到底是怎么确定的?AHB的频率到底是72MH还是啥是有啥决定的?

EJB3 和手动层次结构持久性

完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群

WAR 版本更改后运行 EJB 持久计时器

EJB3 的持久性不起作用