EJB应用程序启动时是否发生任何事件?
问题描述:
我们正在考虑构建一个客户端/服务器应用程序,其中服务器端将是一个EAR应用程序,其中一些会话Bean会暴露API。 我们想知道是否有像EJB模块中的Web模块的ServletContextListener,所以我们可以知道服务器端应用程序何时启动。EJB应用程序启动时是否发生任何事件?
非常感谢。
答
在JEE5中,没有其他机制。 ServletContextListener是最好的,便携式的解决方案。
在JEE6中,您可以使用Singleton EJB。您可以使用@Startup注释Singleton EJB,并在应用程序启动时创建EJB。因此,对于没有WAR组件的“纯EJB”应用程序来说,这将是实现这一目的的机制。
答
威尔哈顿基本上有正确的答案,但可能还有一小部分难题要添加。
EAR可能有多个EJB和Web模块。偶尔也可能需要知道哪一个首先启动。
可以通过在EAR的META-INF目录中的Java EE 6 application.xml文件中使用<initialize-in-order>true</initialize-in-order>
来获得确定性。
然后列出的模块的顺序决定了启动顺序并告诉你是否例如当第一个或最后一个模块启动时,会调用一个特定的@Startup带注释的Singleton。