如何控制 Wildfly 8.2.0 AS 中的部署顺序(首先是 EJB,然后是 MBean 部署)

How to control order of deployment (EJB first and then MBeans deployment) in Wildfly 8.2.0 AS

我正在将包含 MBean 的 EAR 应用程序从 JBoss 6 AS 迁移到 Wildfly 8.2.0 AS。在我的 EAR 应用程序中,MBean 在初始化之前依赖于 EJB。

JBoss 6 AS 中,MBean 中使用的 @DependsOn 注释维护了部署的顺序,即部署依赖 EJB,然后部署 MBean。

Wildfly 8.2.0 中,我正在尝试实现相同的功能,但 @DependsOn 不起作用。

我在 jboss-service.xml 中尝试了以下方法,仅在部署 EAR 文件后才部署 MBean,但这并没有发生。

 <mbean code="sample.HelloWorldService" name="sample:service=HelloWorld,id=1">
    <depends>jboss.j2ee:service=EARDeployment,url='application.ear'</depends>
</mbean>

我也在 E​​JB 中尝试了 @startup,但我无法控制顺序,即 1. EJB 部署 2. MBean 部署。

任何人都可以帮助了解如何控制 Wildfly 8.2.0 中的部署顺序。我需要先部署 EJB,然后再部署 MBean。非常感谢。

只是评论

关于您希望从 MBean 中获取的 EJB,您可能误解了 jboss-deployment-structure.xml. It express an initialization dependency between singleton components (even if the related EJB are singleton be aware about possible problems with DependsOn like WLFY-4251) 的规范。

解决方法

由于您使用的是 Jboss/Wildfly 服务器,您可以选择使用 jboss-deployment-structure.xml 来指定模块之间的依赖关系。 也许,因为您将所有组件都打包在同一个 EAR 应用程序中,所以您可以将组件分成模块,假设一个 MBean.sar 模块包含 MBean 和其他 RelatedEJBs.jar 模块以及您的 MBean 引用的 EJB。

然后定义 MBeans.sar over RelatedEJBs.jar,

的下一个依赖
<jboss-deployment-structure>
   ...
   <sub-deployment name="RelatedEJBs.jar">
     ...
   </sub-deployment>
   <sub-deployment name="MBeans.sar">
     <dependencies>
       <!-- Adds a dependency on the ejb jar. This could also be done with a Class-Path entry -->
       <module name="deployment.YouApp.ear.RelatedEJBs.jar" />
     </dependencies>
   </sub-deployment>
</jboss-deployment-structure>

编辑:一个有用的migration guide to Wildfly