【发布时间】:2012-07-04 07:39:56
【问题描述】:
在集群 JEE6 环境 (Glassfish 3.1.2) 中,@Singleton bean 是/可以在每个集群节点上创建。如果此 Singleton Bean 在其 @PostConstruct 上注册了一个编程计时器 - @Timeout 方法多久执行一次? -- 仅在其中一个单例上(每滴答声),还是为每个注册了计时器的 Singeton 一次(每滴答声)?
下面的代码是一个例子,这个问题对这段代码意味着什么。
@Singleton
public class CachedService {
@Resource
private TimerService timerService;
private static final long CACHE_TIMEOUT_DURATION_MS = 60 * 60 * 1000;
@PostConstruct
void initResetTimer() {
this.timerService.createIntervalTimer(CACHE_TIMEOUT_DURATION_MS,
CACHE_TIMEOUT_DURATION_MS,
new TimerConfig("current user cache timeout", false));
}
@Timeout
public void executeResetTimer() {
this.clearCache();
}
}
示例:应用程序在集群中的 3 个节点上运行。假设 Singleton 在每个节点上都实例化,所以 initResetTimer 总共执行 3 次(每个节点一次)。那么问题是:是否每小时清除一次所有节点上的缓存(调用executeResetTimer)?
(我知道计时器不会在所有节点上同时滴答,因为 Singleton 是在不同时间实例化的,但这不是问题/问题。)
【问题讨论】:
标签: java jakarta-ee timer cluster-computing