How are singletons handled in a web application?

java, singleton

Solution

If your execution environment uses multiple class loaders, then you get one singleton per instance of your class. If your singleton class is loaded into different class loaders, then it's actually two distinct classes and then there will be two "singleton" instances.

You can find some info on the Tomcat class loaders in the documentation.

Problem

From what I understand, a singleton is basically when you have a private member that represents the object you want to have a single instance for. Then in the constructor you initialize the member object. All references for this object are done via a public property, and the public property just references the private member that has already been instantiated. Now in a web application, how does this work? Does a single instance just hang around in the container (say tomcat) until tomcat is shutdown?

Original source