在部署 WAR(或 EAR)时以及在应用程序开始为用户提供服务之前,我需要在 Geronimo/Tomcat 集群中运行一些业务逻辑,并且只运行一次。
迄今为止,我一直这样做的方式是临时的,并且不是容错的。我在节点 1 上使用配置文件并将其指定为“启动节点”。当应用程序在集群中启动时,每个节点都将其 IP 地址写入数据库,然后在 web.xml 中设置为 load-on-startup 的 Servlet.init 中休眠等待。当启动节点看到所有预期节点都已将其 IP 写入数据库时,它会运行业务逻辑。当启动业务逻辑完成时,它会通过向数据库写入确认行来将 all-clear 发送给其他节点。
所有非启动节点都会定期(每秒两次)轮询数据库以获取这个完全清除信号,当它们看到它时,它们会完成启动并从 Servlet.init 返回。此时,所有节点都正常为用户提供应用程序。
我的启动逻辑还没有失败,但我想知道是否有一些 Java EE 标准或强大的 3rd 方库方法可以在我的集群中只运行一次启动逻辑。谢谢!
2013 年7 月 21 日编辑: 我记得 WebLogic Server 具有复杂的启动设施,这些设施可能有助于实现我想在 Geronimo/Tomcat 集群中执行的“集群中只初始化一次”逻辑。我做了一些挖掘,是的,WebLogic 可以做我想做的事!这是一篇关于这个主题的精彩文章:http: //developsimpler.blogspot.com/2012/03/weblogic-clusters-and-singleton-service.html
不幸的是,我买不起 WebLogic。那么,在 Geronimo 或 Tomcat(或其他开源 Java EE 服务器)中是否有类似的东西?或者,是否有我可以使用的 3rd 方库来实现相同的目标?