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
Thank you! This was very helpful. Creating an empty
interface ICleaner and having Cleaner implement it resulting in the
expected behavior (single constructed and shutdown message).
On 11/7/05, James Carman <[EMAIL PROTECTED]> wrote:
- Multiple Instances of Singleton Constructed? Spencer Crissman
- RE: Multiple Instances of Singleton Constructed? James Carman
- Re: Multiple Instances of Singleton Constructed? Spencer Crissman
- RE: Multiple Instances of Singleton Construc... James Carman
- Re: Multiple Instances of Singleton Cons... Spencer Crissman
- RE: Multiple Instances of Singleton... James Carman
- Re: Multiple Instances of Singl... Spencer Crissman
