答案 0 :(得分:1)
如果查看EJB规范,您将看到它是所有类型EJB的必需品。
http://download.oracle.com/otndocs/jcp/ejb-3.1-pfd-oth-JSpec/
我无法找到明确的答案,但在过去13年中查看各种Java论坛,您可以看到答案一致地说,因为容器将决定EJB的生命周期,最终确定可能永远不会被召唤(或在你不期待的时候被召唤)并且使用它会有危险。
答案 1 :(得分:1)
原因是bean生命周期由容器(EJB,CDI或不同的容器)管理,因此您应该使用带有@PreDestroy
注释的方法在要处理bean时进行清理。请记住,JVM无法保证在对象处理期间调用finalize
,因此即使在Java SE环境中也不应该使用它(Java没有像C ++中那样具有析构函数的概念)。
答案 2 :(得分:0)
MDB不会被垃圾回收,除非它在服务器中配置的次数失败。因此,可能永远不会调用此方法,因为MDB池在MDB池中并且根据需要重新使用。由于GC调用了finalize方法,因此您不应该在MDB中定义它,因为它的所有生命周期都由EJB容器管理。如果重写方法,则不会得到任何异常,因为它已经从Object类继承,但是当它内部的代码被调用时,它是不可预测的。此外,访问MDB中的任何资源都为时已晚,因为EJB容器已经完成了关闭连接的清理工作等等