I created an example that uses two approaches: 1) A Singleton SAO factory that returns an MBR object and 2) A Singleton SAO factory that returns a ObjRef to another Singleton SAO.
In order to implement a true Singleton object you must return a Singleton SAO to the client, method #2. The only way to do so is to create an SAO on the server using the Activator class and to return an ObjRef to the client by Marshaling the SAO reference yourself. (See 2nd entry below for an update)
There are fundamental differences between these two types of remote objects and the context of how you use an object alone does not determine whether it is an SAO or CAO. How you activate an object seem to determine this classification and most importantly any MBR object returned to a client that is created by another remote object (factory pattern) that is created with the New statement will be classified as a CAO. The key fundamental difference between an SAO and CAO is their lifetime management with leases.
read more ...