Lifecycle
The life of a singleton bean is very similar to that of the stateless session bean; it is either not yet instantiated or ready to service requests. In general, it is up to the Container to determine when to create the underlying bean instance, though this must be available before the first invocation is executed. Once made, the singleton bean instance lives in memory for the life of the application and is shared among all requests.
Explicit Startup
New in the EJB 3.1 Specification is the option to explicitly create the singleton bean instance when the application is deployed. This eager initialization is triggered simply:
@javax.ejb.Singleton
@javax.ejb.Startup
public class MySingletonBean implements MySingletonLocalBusiness{..}The @javax.ejb.Startup annotation marks that the container must
allocate and assign the bean instance alongside application startup.
This becomes especially useful as an application-wide lifecycle listener. By
additionally denoting a @javax.ejb.PostConstruct method, this callback will
be made at application start:
@javax.ejb.PostConstruct
public void applicationStartLifecycleMethod() throws Exception{...}The method here will be invoked when the EJB is deployed. This application-wide callback was unavailable in previous versions of the specification.