This happens because the actual proxy object is an instance of a subclass of Cleaner.  You are not proxying via an interface, so HiveMind is generating a subclass to do the proxying.

 


From: Spencer Crissman [mailto:[EMAIL PROTECTED]
Sent: Monday, November 07, 2005 8:54 AM
To: [email protected]
Subject: Multiple Instances of Singleton Constructed?

 

I have a Tapestry application in which I am attempting to use hivemind for some startup and shutdown handling.  Basically starting some services when loaded, and then cleaning up after them when the application is undeployed or shutdown. 

As a simple test, I have added the following to my hivemodule.xml:
   <service-point id="Cleaner" interface="Cleaner">
        <invoke-factory model="singleton">
            <construct class="Cleaner">
                <event-listener service-id="hivemind.ShutdownCoordinator"/>
            </construct>
        </invoke-factory>
   </service-point>

   <contribution configuration-id="hivemind.EagerLoad">
        <load service-id="Cleaner"/>
   </contribution>

And the following class to my project:

public class Cleaner implements RegistryShutdownListener {

    public static int c;

    public Cleaner( ) {
        c = c + 1;
        System.out.println("Cleaner constructed! (" + String.valueOf(c) + ")");
    }

    public void registryDidShutdown() {
        System.out.println("The registry has shutdown! (" + String.valueOf(c) + ")" );
        c = c - 1;
    }
}


Oddly, when I go through the process of starting up and shutting down, I see the following:
Cleaner constructed! (1)
Cleaner constructed! (2)
The registry has shutdown! (2)
The registry has shutdown! (1)

It appears that two instances of the Cleaner class are being constructed, when what I really want is a singleton that gets created one time on startup, and then gets called a single time at shutdown.  From the messages it appears that the problem is with the startup portion of the code, because if two instances were not created, then there would be only one instance registered for the shutdown event.

Where is hivemind being instructed to construct the second instance, and how could I prevent it from happening?

Thanks in Advance,

Spencer

Reply via email to