@Singleton @Startup @PostConstruct 方法保证在 EJB 可用于客户端调用之前返回?

2024-02-05

在一个背景下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 组件 应用程序。

  1. 最后一句话具体是什么意思初始化?容器会等待@PostConstruct的方法@Startup在使企业 bean 可用于客户端请求之前返回 bean?

  2. 说起客户要求,使用以下命令执行 EJB 方法的计划执行@Scheduled在这种情况下注释算作一个吗?

我需要保证在应用程序启动时执行一些代码,然后才能运行应用程序的各种 EJB 中的任何业务方法,无论是通过客户端调用还是计划执行。是否在里面运行启动代码@PostConstruct的方法@Singleton, @Startupbean提供这样的保证吗?如果不是,还有其他方法可以保证这种行为吗?


  1. 是的,容器等待@PostConstruct全部的方法@Startup模块(“EJB 应用程序”)中的 beans 在允许任何客户端请求之前返回。
  2. 是的,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(使用前将#替换为@)

@Singleton @Startup @PostConstruct 方法保证在 EJB 可用于客户端调用之前返回? 的相关文章

随机推荐