【问题标题】:Eager / auto loading of EJB / load EJB on startup (on JBoss)急切/自动加载 EJB/在启动时加载 EJB(在 JBoss 上)
【发布时间】:2011-02-12 01:24:06
【问题描述】:

EJB 似乎被延迟加载 - 每当访问时。

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

This topic 给出了一些提示,但不是很令人满意。

【问题讨论】:

    标签: java jboss jakarta-ee ejb-3.0


    【解决方案1】:

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

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

    在 EJB 3.1 之前,没有标准的、仅限 EJB 的解决方案。我建议将 WAR 添加到您的 EAR 并使用 servlet-context-listener。

    【讨论】:

    • 我发现我在 GlassFish 3.1 中的应用程序 @Singleton @Startup EJB 有一个已关闭的 @PersistenceContext EntityManager。我的解决方法是在该 EJB 中设置一个 2 秒后执行的计时器。 (呃!)
    • 对我来说这听起来像是一个错误;我建议举报。
    【解决方案2】:

    根据 Adam Bien 的 Real World Java EE Patterns - Rethinking Best Practices(参见 summary of the patterns)和 Service Starter 模式,确实如 bkail 所建议的那样

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多