Jakarta ee Wildfly/JBoss部署启动顺序
我们使用面向服务的体系结构方法,其中我们有一些核心服务供其他服务使用。在启动时,我们的服务通常会从核心服务中加载一个数据缓存,以便在请求传入或计划任务运行时可用 我使用的是Wildfly 8.2.0,项目A依赖于项目B(两者都是.war)。项目A需要等待项目B加载才能启动。 以下是项目B中的jboss-deployment-structure.xml:Jakarta ee Wildfly/JBoss部署启动顺序,jakarta-ee,jboss,wildfly,wildfly-8,Jakarta Ee,Jboss,Wildfly,Wildfly 8,我们使用面向服务的体系结构方法,其中我们有一些核心服务供其他服务使用。在启动时,我们的服务通常会从核心服务中加载一个数据缓存,以便在请求传入或计划任务运行时可用 我使用的是Wildfly 8.2.0,项目A依赖于项目B(两者都是.war)。项目A需要等待项目B加载才能启动。 以下是项目B中的jboss-deployment-structure.xml: <?xml version='1.0' encoding='UTF-8'?> <jboss-deployment-struct
<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<module-alias name="deployment.projectB"/>
</deployment>
</jboss-deployment-structure>
我想要的:如果A和B在同一台Wildfly服务器上,A需要等待B启动。如果A和B在不同的服务器上,它们应该立即启动。
可选依赖项可以实现这一点吗?比如:
<dependencies>
<module name="deployment.projectB" optional="true" />
</dependencies>
更新
我只是在同一台服务器上设置了A和B的optional=“true”
,在这个测试中,A和B同时启动(在日志中,我看到ejbjndi绑定以非常随机的顺序列出:B,A,B,B,B,B,B,B,A,A)。我所说的“JNDI绑定”,是指日志中说的“会话bean的JNDI绑定……如下所示”
因此,我可能不得不放弃optional=“true”
计划
更新#2
由于项目A依赖于项目B,因此项目B由项目A的类加载器加载,这在本例中不是一件好事(一开始我就发现使用了错误的log4j.xml文件)
更新#3
使用jboss-deployment-structure.xml来影响加载顺序可能还不够。看起来jboss-deployment-structure.xml可以影响类从war/ear加载的顺序,但不会等到它们的EJB启动后才开始加载下一个部署
还有其他想法吗
谢谢 刺耳的回答是这就是.ear文件的用途。但实际上,你说的一个依赖另一个是什么意思?它们是如何绑定在一起的?哈哈。项目A在项目B中使用EJB,来自启动时运行的代码。因此,如果项目B没有启动并运行,A就会出错。我们可以建立一个重试机制,但不希望这样,因为我们有很多这样的项目。您是否考虑过尝试使用web.xml中的resource ref来引用ejb的jndi?如果这样做有效,它可能比模块依赖性更灵活。我从来没有尝试过这个,所以我不能肯定它是否有效。@TerrenceCurran我会检查一下,谢谢你的提示。如果你有任何其他想法,我也想听听。你应该使用jboss-all.xml文件,但不幸的是,
可选
不受支持。仅供参考:
<dependencies>
<module name="deployment.projectB" optional="true" />
</dependencies>