This week's book giveaway is in the General Computing forum. We're giving away four copies of Arduino in Action and have Martin Evans, Joshua Noble, and Jordan Hochenbaum on-line! See this thread for details.
EJB in Action code example chapter 3 User account creation.
I invoked createAccount() which is not marked with @Remove annotation, from the client code. As a result of the JNDI lookup a new instance of the bean is created and PostConstruct callback is invoked as shown below.
20:49:51,359 INFO [STDOUT] openConnection() 20:49:51,359 INFO [STDOUT] I am callback for PostConstruct events for this stateful session bean 20:49:51,359 INFO [STDOUT] I will be invoked after the bean is instantiated and DI are complete.
I invoked the client code again and i was surprised to see that PostConstruct callback was invoked. Since the bean is a stateful session bean and client never invoked a buisness method with @Remove and therefore the bean instance should continue to exists in main memory since the client invocation of the buisness method was within say 2 seconds. I was expecting the buisness method createAccount() to be invoked on the same session stateful bean. 20:50:06,796 INFO [STDOUT] openConnection() 20:50:06,796 INFO [STDOUT] I am callback for PostConstruct events for this stateful session bean 20:50:06,796 INFO [STDOUT] I will be invoked after the bean is instantiated and DI are complete.
I kept the client connection idle for atleast 10 minutes and PrePassivate methods were never invoked. How long does one has to wait ? And is this time configurable from JBOSS ? [My guess is , it should be]