当EJB依赖于另一个仍未启动的群集中的应用程序时,我应该如何初始化EJB?
我该怎么做?
您认为我应该如何进行?你能推荐我一些模式吗?
答案 0 :(得分:2)
我认为以上所有建议都是有效的。我认为这是关于你问题的环境问题。
根据您是否可以独立启动A,您可以使用Gas建议的第三个元素,以确保如果B未准备好,A不会出现(并且失败或卡住)。
另一方面,如果A自动启动而您无法更改,那么这取决于您是否可以控制初始化过程发生的时间。如果你,安排整个依赖链的初始化,它应该工作,但如果你不知道或无法控制何时B上线而A将无论如何开始,那么除了B之外别无选择起来。
就个人而言,只要您正在等待的内容可以快速启动或在发生故障时快速恢复,我就会看到民意调查不是那么糟糕。
另外请注意,您是否可以通过配置控制群集的启动方式?如果您使第二个应用程序的集群始终首先启动,则可以避免此问题。
答案 1 :(得分:1)
即使您设法解决EJB的初始化,您最终也会创建依赖项。从架构上讲,初始化依赖性将撤消决定拆分App#1(网关)和App#2(服务主机)的原因。
替代建议是让它们保持独立,就像它们当前一样,而是依赖于异常处理。 如果App#2中的服务无法访问,您可以选择抛出自定义异常,例如"服务不可用,请稍后再试"或者,根据需要,在服务再次可用时汇集要执行的请求。
这也可以保护您免受启动后App#2的失败,对于e.x.如果由于某些内部错误而导致维护停止或无响应。