在WAR(或EAR)部署时以及应用程序开始向用户提供服务之前,我需要在Geronimo / Tomcat集群中运行一次业务逻辑一次。
我一直这样做的方式已经过时并且不是容错的。我在节点1上使用配置文件并将其指定为"启动节点"。当应用程序在集群中启动时,每个节点都将其ip地址写入数据库,然后在Servlet.init中等待睡眠,该Servlet.init设置为在web.xml中加载启动。当启动节点发现所有预期节点都已将其IP写入数据库时,它将运行业务逻辑。当启动业务逻辑完成时,它通过向数据库写入确认行将all-clear发送到其他节点。
所有非启动节点定期(每秒两次)轮询数据库以获取此全清除信号,当他们看到它时,他们完成启动并从Servlet.init返回。此时,所有节点通常都会向用户提供应用程序。
我还没有让我的启动逻辑失败,但我想知道是否有一些Java EE标准或强大的第三方库方法在我的集群中只运行一次启动逻辑。谢谢!
编辑2013/07/21:我记得WebLogic Server拥有先进的启动工具,可能对群集中只实现一次" init非常有用。我想在Geronimo / Tomcat集群中做的逻辑。我做了一些挖掘,是的,WebLogic可以做到我想要的!这是一篇关于这个主题的精彩文章:http://developsimpler.blogspot.com/2012/03/weblogic-clusters-and-singleton-service.html
遗憾的是,我买不起WebLogic。那么,Geronimo或Tomcat(或其他开源Java EE服务器)中是否有类似的东西?或者,是否有第三方库可用于实现相同的目标?
答案 0 :(得分:1)
对于分布式协调,有Zookeeper等工具。
我认为没有针对您所寻找的Java EE标准,我无法理解这样的用例,您能描述为什么您希望1个“主”应用程序等待其他应用程序启动吗?