Glassfish集群+远程实例无法恢复EJB计时器

时间:2013-01-24 01:06:23

标签: java-ee ejb ejb-3.0 java-ee-6 glassfish-3

我们的设置是:Glassfish版本3.1.2.2 -

  1. DAS和instance-1在同一台机器上运行,而instance-2则在 在与config节点相同的网络中的另一台机器上运行。
  2. 我们已根据Glassfish高可用性指南在共享目录中设置事务日志记录:http://docs.oracle.com/cd/E18930_01/html/821-2416/gjjpy.html#gaxim
  3. 我们正在使用单播配置进行群集通信 网络负载均衡器在网络中以组播方式运行。
  4. 我们的应用程序(.ear包含多个.war)有2个持久定时器(因为我们在群集中每个定时器只需要一个实例)。
  5. 当instance-1(或instance-2)正常关闭时,另一个实例会按预期从关闭实例中恢复计时器。当instance-2崩溃或异常脱机时,instance-1恢复其计时器(再次,如预期的那样)。但是当instance-1崩溃时,instance-2似乎没有像预期的那样恢复它的定时器。

    从日志中我可以看到,instance-2收到了针对instance-1的正确故障转移消息并开始恢复,但是在没有恢复故障实例的任何事务或定时器的情况下完成恢复。

    谁能告诉我问题是什么? (我应该提供更多信息吗?)

1 个答案:

答案 0 :(得分:0)

经过2周左右的工作,我们终于找到了问题。

当群集中的实例出现故障时,恢复实例似乎通过尝试访问已关闭实例的“node-host”:“admin-node-port”来检查实例是否仍处于运行状态。如果您在DAS上使用标准创建的节点(就像我们一样),则将node-host设置为“localhost”(就像实例-1所做的那样)。

因此,实例-2试图通过尝试连接到“localhost”而不是“instance-1-ip”来查看实例-1是否已关闭。由于它可以连接到localhost,因此实例-1被错误地标记为正在运行,并且恢复没有继续进行。

我们必须更改domain config.xml中instance-1节点的node-host来修复此问题,因为无法通过asadmin或admin console更改默认localhost-的配置。