3.13 PreDestroy not called:
1. a crash of the EJB container
2. a system exception thrown from the instance's method to the container
Also, according to Ethuware,
If a (stateful) bean is passivated and if the timeout (@StatefulTimeout) occurs , the container does not call the PreDestroy method.
This point has been shown on p.21 of Frits notes.
On p.38 of Frits' notes,
That is the PreDestroy in the context of a MessageDriven bean.
On p.17 (and in the graph on p.21) you will find the following summary for Session Beans:
2.1.9 Predestroy not called
1. A crash of the EJB container.
2. A system exception thrown from the instance’s method to the container.
3. A timeout of client inactivity while the instance is in the passive state. (Stateful SB only)