EJB应用程序关闭钩子

6
我该如何添加一个关闭钩子(就像JVM关闭钩子)来监听EJB应用程序的部署/卸载(以停止JMX MServerBean),并在获得通知时进行操作?我可以使用ServletContextListener,但不幸的是,这是一个EJB jar文件。
2个回答

8

使用@Singleton bean并实现@PreDestroy

@Startup
@Singleton
public class HookBean {

    @PreDestroy
    void wholeApplicationShuttingDown {
    }
}

更新:刚刚注意到 ejb-3.0 标签。 @Singleton 是在3.1版本中添加的。但是你可能会发现它很有用。


我会尝试升级JBoss 5.1以支持ejb3.1并进行测试。 - n002213f

0

3
不会起作用。无状态bean是被池化的——可能有几个这样的实例,也可能没有——如果它们没有被使用。此外,您不能保证容器不会销毁池中的所有实例,例如在夜间,只因为它们最近没有被使用过。 - Tomasz Nurkiewicz
1
我能感受到你的痛苦。是的,使用Spring,在非懒加载bean上简单地使用@PreDestroy方法就可以解决问题...实际上,@Singleton@Startup注释正是在EJB 3.1中引入的,以解决OP所遇到的问题(也没有可靠的启动回调...)。 - Tomasz Nurkiewicz
@Sean Patrick Floyd:让我引用自己的话:他需要一个同步的SLSB实例计数器,并在达到0时进行清理。相当不方便。-看看上面的四个评论; -此外,不能保证容器在关闭之前创建甚至一个实例... - Tomasz Nurkiewicz
1
@TomaszNurkiewicz 不好意思,我眼瞎了 :-) - Sean Patrick Floyd
1
感谢大家的建议,我会尝试升级到 EJB 3.1 并使用 Singleton。 - n002213f
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接