Java 在JBoss7部署结束时执行操作

Java 在JBoss7部署结束时执行操作,java,java-ee-6,jboss7.x,jboss-weld,Java,Java Ee 6,Jboss7.x,Jboss Weld,我们有一个应用程序需要在部署结束时进行一些初始化(在JBoss 7.1.0实例中),因为只有这样,所有必需的服务才可用(它们中有很多) 我们尝试的一种方法是: 我们有一个单例服务和一个@Startup注释,但到目前为止,我们没有成功地告诉JBoss最后一次创建实例而没有太多麻烦 我们可以使用@DependsOn,但我们必须保持一个不断增长且已经很大的依赖项列表,因此我们宁愿这样做作为最后手段 在过去(JBoss4和JBoss5),有可能定义对应用程序的依赖关系(比如@Depends(“myapp

我们有一个应用程序需要在部署结束时进行一些初始化(在JBoss 7.1.0实例中),因为只有这样,所有必需的服务才可用(它们中有很多)

我们尝试的一种方法是:

我们有一个单例服务和一个@Startup注释,但到目前为止,我们没有成功地告诉JBoss最后一次创建实例而没有太多麻烦

我们可以使用
@DependsOn
,但我们必须保持一个不断增长且已经很大的依赖项列表,因此我们宁愿这样做作为最后手段

在过去(JBoss4和JBoss5),有可能定义对应用程序的依赖关系(比如
@Depends(“myapp.ear”)
),这正是我们所需要的

到JBoss7时,情况已经发生了变化,但我认为仍然有办法做到这一点

另一种方法是尝试创建我们自己的JBoss子系统,该子系统在所有其他子系统启动后调用,但我们无法找到一种方法来等待其他子系统完成,然后再执行我们需要的操作


我们还可以研究哪些其他选项?

您可以在WEB-INF/WEB.xml中使用设置load on startup>1/load on startup>定义一个servlet,例如BootstrapServlet.java,并在该servlet中进行初始化。

您可以将带有
@startup
注释的类放在不同的EAR中,或者更好的WAR中。我认为,默认情况下,WAR将在任何EAR之后部署,而无需配置任何东西


在startup类中,您只需调用实际的初始化,它与应用程序的其余部分一起使用
myapp.ear
部署。调用是通过EJB本地或远程接口完成的。

这可能是一个选项,但通常我不想创建另一个应用程序来初始化第一个应用程序。不过,谢谢你的提示。谢谢你的提示。然而,我们经常有一个以上的战争在我们的耳朵,将不得不定义他们的启动顺序(这应该是可能的)-并且在某些情况下,我们甚至可能没有战争,因此没有Web.xML.其他的事情可以考虑,检查服务是否可用在一个循环中。或者执行基于时间的初始化,因此启动类或servlet在开始初始化之前等待x分钟。。通常部署速度很快,因此可能只需1分钟。。最后一个想法可能是让服务在准备就绪时进行自我注册(如果这在服务中是可能的话),这样您就可以在所有服务就绪时签入循环