我正准备使用新的EJB3 TimerService(作为Java EE 6的一部分),和往常一样,我对JavaDoc的简洁性印象深刻:)
您知道persistent
对象的TimerConfig
属性有什么影响吗?
JavaDoc TimerConfig说:持久属性确定相应的计时器是否具有跨越创建它的JVM的生命周期。它是可选的,默认为true。
答案 0 :(得分:50)
持久属性意味着容器需要将计时器状态持久保存到数据库。如果您需要保证即使服务器脱机(故意或崩溃)也会触发计时器,这一点很重要。当服务器重新联机时,需要执行错过的计时器。将计时器设置为持久性还具有确保计时器仅在一个服务器JVM(但不一定是创建它的计算机)中执行的副作用,无论对您的产品意味着什么。例如,在集群服务器环境中,这通常意味着即使EJB模块在3个JVM上运行,也只有一个JVM将执行计时器。
persistent = true是EJB 3.1之前唯一可用的选项。某些定时器操作不足以保证此级别的可靠性,因此添加了选项以允许非持久性定时器。将计时器设置为非持久性也具有确保其在创建它的JVM中运行的副作用。这对于更新内存缓存或静态HTML非常有用。