在启动时(在JBoss上)启动/自动加载EJB /加载EJB
问题描述:
EJB似乎被懒惰地加载 - 无论何时访问。在启动时(在JBoss上)启动/自动加载EJB /加载EJB
但是,我想要对它们进行热切初始化 - 即每当容器启动时。这是如何实现的(特别是在JBoss中)
This topic给出了一些提示,但并不令人满意。
答
由于EJB 3.1,单豆可以通知模块启动和停止:
@Singleton
@Startup
public class StartupBean {
@PostConstruct
private void postConstruct() { /* ... */ }
@PreDestroy
private void preDestroy() { /* ... */ }
}
此前EJB 3.1,没有标准,EJB,唯一的解决办法。我建议在您的EAR中添加一个WAR并使用servlet-context-listener。
答
据亚当边的真实世界的Java EE模式 - 反思最佳实践(见summary of the patterns)和服务启动模式,这的确是bkail表明
- 与Java EE 6 = EJB 3.1使用@Singleton与@Startup(也许还有@DependsOn)
- 之前,唯一的标准和便携的方式是使用Servlet API,例如一个HttpServlet在其init()方法中启动EJB,并且在web.xml中将load-on-startup设置为1。
我发现我的应用程序在GlassFish 3.1中,@Singleton @Startup EJB得到了一个@PersistenceContext EntityManager被关闭。我的解决方法是在该EJB中有一个计时器,该计时器在2秒后执行。 (杜!) – 2011-04-21 21:19:30
这听起来像是一个错误,我会建议报告它。 – 2011-04-21 23:16:42