On Mar 18, 2009, at 1:21 PM, Karan Malhi wrote:

Section 4.4.3 (Missed Destroy Calls) of  EJB 3.0 spec says that if

*A system exception thrown from the instance’s method to the container, then
@PreDestroy would not be called*

Could somebody explain what could be the reason behind not choosing to call @PreDestroy? To me it looks like a very natural candidate for @PreDestroy.

Destroying beans that throw runtime exceptions is not something about EJB I'm fond of in general.

That said if you're on board with the concept that a bean that has thrown a runtime exception is invalid you really don't want to keep invoking it in the scope of the current transaction.

For stateful session beans, when they time out they are destroyed -- or perhaps more accurately phrased, never brought back into memory -- and the PreDestroy method is also not called.

For general consistency the rule is @PreDestroy is not called on an invalid bean.

-David

Reply via email to