2 Replies Latest reply on Feb 19, 2007 5:58 AM by wolfc

    Predestroy!

      Hello,

      I have been thinking about starting a topic on "When should the PreDestroy callback called?" for some time.

      I have been developing EJBs over two years and also as I closely observed the evolution of the EJB3 code base in Jboss at the source level. Not to mention EJB3 spec pdf is on my desktop ;-)

      I have some local resources in one of my projects that must be definitely released on EJBs' destroy.

      Looking at SimpleStatefulCache, I see that a in 5 minutes (by default) SFSB is passivated and it stays "forever" on the disk.

      Spec is not clear enough about from then on what to do. It does state that after some extended time, the container should remove the handles, references etc., and annotates the PreDestroy callbacks next to the remove driven and timeout driven transitions to "does not exist" state. However in further explanation in the text, clearly says that preDestroy is called on remove method invocation but ignores the issue in timeout driven cases. (Ref Spec, P76, pragraph starts as "While the instance is in the passivated state, the...")

      So Jboss EJB implementation is correct in that way. However, I strongly think the spec is unclear in this scenario. Resources allocated in PostConstruct, init and throughout the beans usage, MUST be released. Therefore preDestroy must be guaranteed to be called.

      This might even be extended to undeployment of the container.

      Therefore, I would like to ask the opinions of the people whether I am right on:
      - A second pool of passivated beans required.
      - After some designated time passivated beans must be destroy forever.
      - Before the point above preDestroy method(s) must be called.

      Regards,
      Hasan ceylan