37

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

你知道物体persistent属性的作用是什么吗?TimerConfig

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

4

1 回答 1

59

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

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

于 2010-04-23T05:42:21.733 回答