在集群 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 是在不同时间实例化的,但这不是问题/问题。)