【问题标题】:EJB application shutdown hookEJB 应用程序关闭挂钩
【发布时间】:2011-09-29 19:58:04
【问题描述】:

当部署/取消部署 EJB 应用程序(停止 JMX MServerBean)时,我如何添加关闭挂钩(就像 JVM Shutdown Hook)来监听(获取通知)?

我可以使用 ServletContextListener,不幸的是这是一个 EJB jar。

【问题讨论】:

    标签: java ejb-3.0 monitoring jmx


    【解决方案1】:

    使用@Singleton bean 并实现@PreDestroy

    @Startup
    @Singleton
    public class HookBean {
    
        @PreDestroy
        void wholeApplicationShuttingDown {
        }
    }
    

    更新:刚刚注意到ejb-3.0 标签。 @Singleton 在 3.1 中添加。但也许你会发现它很有用。

    【讨论】:

    • 看看我是否可以升级 JBoss 5.1 以支持 ejb3.1 并尝试一下。
    【解决方案2】:

    使用无状态 Bean with a @PreDestroy method

    【讨论】:

    • 行不通。无状态 bean 会被池化——可能有多个这样的 bean 实例,或者没有——如果它们没有被使用的话。此外,您不能保证容器不会破坏池中的所有实例,例如只是因为它们最近没有使用,所以在半夜。
    • @TomaszNurkiewicz 引用上面的链接:“因为无状态会话 bean 永远不会钝化,它的生命周期只有两个阶段:不存在和准备好调用业务方法。 "
    • can feel你的痛苦;-)。是的,在非惰性 bean 上使用 Spring 简单的 @PreDestroy 方法可以解决问题...实际上在 EJB 3.1 中引入了 @Singleton@Startup 注释正是为了解决 OP 遇到的问题(没有可靠的启动回调也...)
    • @TomaszNurkiewicz 抱歉,我是瞎子 :-)
    • 感谢大家的建议,将尝试升级到 ejb3.1 和我们的 Singleton。
    猜你喜欢
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 2011-07-20
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    相关资源
    最近更新 更多