Stateful session beans are intended to represent stateful conversations with clients of a component application. A stateful session bean looks like an object with a business interface (EJB 3.0 and above) or an object with a remote interface and a factory with a home interface (EJB 2.1 and below).
public interface ASessionBeanHome extends javax.ejb.EJBHome { public ASessionBean createOneWay (int iArgument) throws RemoteException, CreateException; public ASessionBean createAnotherWay (int iArgument, String sArgument) throws RemoteException, CreateException; } public interface EJBHome extends Remote { public void remove (Handle handle) throws RemoteException, RemoveException; ... }
public interface ARemoteInterface extends javax.ejb.EJBObject { public void myMethodOne (int iArgument) throws RemoteException { ... } public int myMethodTwo (Object oArgument) throws RemoteException { ... } }
public class ASessionBean implements javax.ejb.SessionBean { // Method that provides reference to standard session context object public void setSessionContext (SessionContext sessionContext) { ... }; // Method that is called after construction public void ejbCreateOneWay (int iArgument) throws RemoteException, CreateException { ... } public void ejbCreateAnotherWay (int iArgument, String sArgument) throws RemoteException, BadAccountException, CreateException { ... } // Method that is called before destruction public void ejbRemove () { ... } // Methods that are called after activation and before passivation public void ejbActivate () { ... } public void ejbPassivate () { ... }; // Some business methods ... public void myMethodOne (int iArgument) { ... } public int myMethodTwo (Object oArgument) { ... } }
@Stateful public class ASessionBean implements ABusinessInterface { // Injected reference to standard session context object @Resource public SessionContext sessionContext; // Method that is called after construction or activation @PostConstruct @PostActivate public void myInitMethod () { ... } // Method that is called before passivation or destruction @PreDestroy @PrePassivate public void myDoneMethod () { ... } // Some business methods ... public void myMethodOne (int iArgument) { ... } public int myMethodTwo (Object oArgument) { ... } // Business method that removes the bean instance @Remove public void myRemovalMethod () { ... } // Interceptor method that can also be in separate interceptor class @AroundInvoke public Object myInterceptor (InvocationContext inv) throws Exception { ... Object result = inv.proceed (); ... return (result); } }
Lifecycle of a stateful session bean from client point of view. (EJB 3.0 and above) Created when a reference is obtained, a business method to initialize the state, a method designated as a Remove method to discard the state. (EJB 2.1 and below) Created when a createXxx method is called on home interface, delivered as an ejbCreateXxx method to initialize the state, a remove method to discard the state.
Lifecycle of a stateful session bean from container point of view. Activation and passivation, preserves conversational state as transitive closure of field values using serialization.