为什么我的EJB3,1计时器在两个服务器实例上运行?

时间:2014-06-23 18:00:56

标签: java timer ejb-3.1

我们有一个@Singleton EJB正在运行一个带有由以下注释创建的超时方法的计时器:

@Schedule(hour = "*", minute = "*/5", second = "0")
public void processCodes() {

很长一段时间它只能在集群服务器的单个实例上运行,但现在它坚持在两个实例上运行,这导致重复工作。

我们添加了' persistent',就像这样:

@Schedule(hour = "*", minute = "*/5", second = "0", persistent = true)
public void processCodes() {

即使这应该是默认值。它仍然可以在两台服务器上运行是否有一些服务器设置我应该检查以确保正确创建群集?

任何关于尝试什么或在下一步看什么的建议都将不胜感激。 谢谢! 彼得

1 个答案:

答案 0 :(得分:1)

默认情况下,EJB容器使用特定于服务器的数据库来保存持久定时器。在集群(网络部署)环境中,您需要将EJB容器配置为使用指向公共数据库的数据源。最简单的方法是将EJB计时器服务配置为使用自定义数据源,但您也可以配置EJB计时器服务以将自定义计划程序与自定义数据源一起使用。知识中心的Configuring a timer service for network deployment主题中有更多信息。