我们使用面向服务的体系结构方法,其中我们有一些其他服务使用的核心服务 . 在启动时,我们的服务通常从核心服务加载数据缓存,以便在请求进入或计划任务运行时可用 .

I'm using Wildfly 8.2.0 and have Project A which depends on Project B (both are .war's). Project A needs to wait for Project B to be loaded in order to start up.

这是项目B中的jboss-deployment-structure.xml:

<?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>

在旁注中,使用了 module-alias ,因为项目B是一个名为"projectB-2.0.0.war"的战争,但是当我指定依赖项时,我不想关心版本号 .

这是项目A中的jboss-deployment-structure.xml:

<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
   <deployment>
      <dependencies>
         <module name="deployment.projectB" />
      </dependencies>
   </deployment>
</jboss-deployment-structure>

What I would like: if A and B are on the same Wildfly server, A needs to wait for B to start. If A and B are on separate servers, they should start immediately.

可选的依赖项会实现吗?喜欢:

<dependencies>
     <module name="deployment.projectB" optional="true" />
  </dependencies>

Update

我只是在同一台服务器上用A和B设置 optional="true" ,在这个测试中,A和B同时启动(在日志中,我看到EJB JNDI绑定以非常随机的顺序列出:B, A,B,B,B,B,B,A,A) . 通过"JNDI bindings",我的意思是日志说"JNDI bindings for session bean... are as follows" .

所以也许我不得不扔掉 optional="true" 计划 .

Update #2

由于项目A依赖于项目B,项目B正在被项目A的类加载器加载,在这种情况下这不是一件好事(马上就看到我正在使用错误的log4j.xml文件) .

Update #3

使用jboss-deployment-structure.xml影响加载顺序可能还不够 . 看起来jboss-deployment-structure.xml可以影响类从war / ear中加载的顺序,但是在开始加载下一个部署之前不会等到它们的EJB启动 .

还有其他想法吗?

谢谢!