急切/自动加载 EJB /启动时加载 EJB(在 JBoss 上)

2022-09-02 00:57:29

EJB 似乎被懒惰地加载 - 无论何时访问。

但是,我想热切地初始化它们 - 即每当容器启动时。这是如何实现的(特别是在 JBoss 中)

本主题提供了一些提示,但不是很令人满意。


答案 1

从 EJB 3.1 开始,可以通知单例 Bean 模块启动和停止:

@Singleton
@Startup
public class StartupBean {
    @PostConstruct
    private void postConstruct() { /* ... */ }

    @PreDestroy
    private void preDestroy() { /* ... */ }
}

在 EJB 3.1 之前,没有标准的、仅限 EJB 的解决方案。我建议在你的 EAR 中添加一个 WAR,并使用一个 servlet 上下文监听器。


答案 2

根据 Adam Bien 的 Real World Java EE 模式 - 重新思考最佳实践(参见模式摘要)和服务启动器模式,它确实如 bkail 所建议的那样。

  • 使用Java EE 6 = EJB 3.1,使用@Singleton和@Startup(也许还有@DependsOn)
  • 在此之前,唯一的标准和可移植方法是使用Servlet API,例如,一个HttpServlet在其init()方法中启动EJB,并在web.xml中将启动加载设置为1。

推荐