What happens when a user calls remove on a passivated session bean? 1) Container treats it as any other business method and calls ejbActivate and then ejbRemove. 2) Container will kill the bean without calling ejbActivate. I personally think 1 is correct. But I wanted to confirm that.
No, 2 is correct because it is pointless for the container to activate a stateful session bean and then destroy it. It will go straight from the "passivated" state to the "does not exist" state without ever getting an ejbRemove() call. As ejbRemove() may never be called, it makes sense to replicate your code (cleanup, finalization, etc) in both ejbPassivate() and ejbRemove(). It's also worth bearing in mind that ejbPassivate() may also never be called. This means that none of your cleanup code may ever get called, so you will need do your cleanup at intervals in case ejbPassivate() or ejbRemove() were never called.
I read the article posted by Kathy Siera as directed by Seema but I don't think that there is a direct answer to what Sany Bel has asked. With respect to Sany's question is the answer option number 1 or 2? and also why? Thanks, Santosh
posted 16 years ago
hello, Option 1 is correct. Kathy says in the given post: for stateFUL session beans, the container will treat a remove() method as a business method, and "wake up" the bean to invoke the ejbRemove() method (so ejbActivate() will be called first). Thanks [ April 09, 2004: Message edited by: seema manivannan ]