在一个背景下Java EE 6
应用程序运行于WebSphere 8.0
,我需要先执行一些启动任务,然后才能执行任何业务方法。用一个@Startup
, @Singleton
用于此目的的 bean 似乎是一个有前途的解决方案。然而,我并不完全清楚应用程序生命周期到底是什么样子的。这EJB 3.1 规范 http://download.oracle.com/otn-pub/jcp/ejb-3.1-fr-eval-oth-JSpec/ejb-3_1-fr-spec.pdf陈述如下:
默认情况下,容器负责决定何时
初始化一个 Singleton bean 实例。然而,Bean 开发人员可以
可以选择配置单例以进行急切初始化。如果
启动注释出现在 Singleton bean 类上,或者如果
单例已通过部署描述符指定为
需要急切初始化,容器必须初始化
应用程序启动序列期间的 Singleton bean 实例。
容器必须在启动之前初始化所有此类启动时单例
任何客户端请求都被传递到任何企业 Bean 组件
应用程序。
-
最后一句话具体是什么意思初始化?容器会等待@PostConstruct
的方法@Startup
在使企业 bean 可用于客户端请求之前返回 bean?
-
说起客户要求,使用以下命令执行 EJB 方法的计划执行@Scheduled
在这种情况下注释算作一个吗?
我需要保证在应用程序启动时执行一些代码,然后才能运行应用程序的各种 EJB 中的任何业务方法,无论是通过客户端调用还是计划执行。是否在里面运行启动代码@PostConstruct
的方法@Singleton
, @Startup
bean提供这样的保证吗?如果不是,还有其他方法可以保证这种行为吗?
- 是的,容器等待
@PostConstruct
全部的方法@Startup
模块(“EJB 应用程序”)中的 beans 在允许任何客户端请求之前返回。
- 是的,WebSphere Application Server 中就是这种情况,如开发单例会话 Bean http://www.ibm.com/support/knowledgecenter/SSAW57_8.0.0/com.ibm.websphere.nd.doc/info/ae/ae/tejb_ssb.html知识中心的主题,其中提到“单例 bean 中的 PostConstruct 方法可以创建 EJB 计时器 [...] 但是,为了避免死锁,PostConstruct 方法不得等待 EJB 计时器运行”。换句话说,计时器回调调用将等待
@PostConstruct
方法来完成,所以@PostConstruct
方法不得等待计时器回调调用完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)