我想知道如何才能确保完整应用程序的初始化,而不会出现某些应用程序组件可能被访问或触发的问题。
我说的是JavaEE6/JavaEE7应用程序,其中包含多个WAR和EJB组件。
想象一下,您必须确保在启动EAR应用程序时必须初始化应用程序部分。例如,你运行像数据库迁移这样的工具,这可能需要几个小时。在Java EE 6/Java EE 7中,如何控制应用程序的上述任何部分在初始化正确通过之前都不能执行。如果初始化失败,拒绝Java EE中任何服务上的操作?
我希望我能以正确的方式解释我的问题。简而言之:如何在执行应用程序的任何其他代码之前执行“初始化”-code?如果我的“初始化”-code失败了,我如何避免执行其他任何代码呢?有没有标准的JavaEE6/JavaEE7方法?如果没有,有没有jboss7 7/wildfly的方法?
发布于 2014-07-27 01:06:20
下面是我们是如何做到的:
对于每个应用程序/服务(ear或war,请随意选择),有一个"startupFinished“@Startup @Singleton。这个单例将依赖于该应用程序中的所有其他单例-这些单例将执行所有实际的初始化工作(为了避免引用的延迟初始化的缺陷,最好对所有这些单例调用某个isInitialized()方法)。
应用程序中的所有StartupFinished都依赖于该应用程序的MDB单例(请参阅this question了解如何实现)。
对于跨应用程序的依赖(交叉耳朵)-如果A.ear依赖于B.ear,则让A的StartupFinished单例注入B的StartupFinished (您需要将其公开为@Remote EJB)。
更好的是,为了正确地做到这一点,在A中需要一个依赖于B的StartupFinished的StartupStarted单例-以便在A开始初始化之前真正地确保B是完全和完全的。
https://stackoverflow.com/questions/24973381
复制相似问题