我正在将包含MBean的EAR应用程序从JBoss 6 AS
迁移到Wildfly 8.2.0 AS
。在我的EAR应用程序中,MBean在初始化之前依赖于EJB。
在JBoss 6 AS
中,MBean中使用的@DependsOn
注释维护了部署的顺序,即部署了Dependent 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>
我还在EJB中尝试了@startup
但我无法控制序列,即1. EJB部署2. MBeans部署。
有人可以帮助您了解如何在Wildfly 8.2.0
中控制部署顺序。我需要先部署EJB然后再部署MBeans。非常感谢。
答案 0 :(得分:2)
关于您希望从MBean获取的EJB,您可能误解了jboss-deployment-structure.xml的具体操作。它表示单例组件之间的初始化依赖关系(即使相关的EJB是单例,也要注意DependsOn可能存在的问题,如WLFY-4251)。
由于您正在使用Jboss / Wildfly Server,因此您可以选择使用jboss-deployment-structure.xml来指定模块之间的依赖关系。 也许,因为您正在将所有组件打包在同一个EAR应用程序中,您可以将组件分成模块,假设一个 MBean.sar 模块包含MBean和其他 RelatedEJBs.jar 包含MBean引用的EJB的模块。
然后,您将 MBeans.sar 的下一个依赖项定义为 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。