...
Overview
As the name implies a javax.ejb.Singleton is a session bean with a guarantee that there is at most one instance in the application.
...
Here we see a bean that uses the Bean-Managed Concurrency option as well as the @Startup annotation which causes the bean to be instantiated by the container when the application starts. Singleton beans with @ConcurrencyManagement(BEAN) are responsible for their own thread-safety. The bean shown is a simple properties "registry" and provides a place where options could be set and retrieved by all beans in the application.
...
ComponentRegistryBean
Here we see a bean that uses the Container-Managed Concurrency option, the default. With @ConcurrencyManagement(CONTAINER) the container controls whether multi-threaded access should be allowed to the bean (@Lock(READ)) or if single-threaded access should be enforced (@Lock(WRITE)).
...
...
Unless specified explicitly on the bean class or a method, the default @Lock value is @Lock(WRITE). The code above uses the @Lock(READ) annotation on bean class to change the default so that multi-threaded access is granted by default. We then only need to apply the @Lock(WRITE) annotation to the methods that modify the state of the bean.
...
See the Singleton Beans page for more advanced details on Container-Managed Concurrency.
Test Case
...
Running
Running the example is fairly simple. In the "simple-singleton" directory run:
...
Which should create output like the following.
...
...