How to auto-start my singleton service?
karanmg Mar 27, 2007 8:31 PMI am using JDK 5, JBoss 4.0.5GA and Windows. I'm fairly familiar with clustering, but barely with MBeans and sar archives.
I have gone through several posts, documentation and the wiki, and finally
managed to make a MBean service. I deployed the sar to farm/ it gets copied to all nodes. When I go to the web-console, I can see that the service has been successfully deployed on both the nodes. The jboss-service.xml of the sar contains:
<mbean code="com.tcore.jboss.service.SingletonServiceExample" name="tcore.services:service=SingletonServiceExample"> <depends>jboss.ha:service=HASingletonDeployer,type=Barrier</depends> <attribute name="Message">Message in the XML</attribute> </mbean>
Shouldn't the service automatically start on whichever node is the master?
I can manually invoke the start() operation which prints a diagnostic message to let me know that the service has started. But how do I make it work so that whichever node becomes master the service starts and when it loses master status, the service stops?
Following is the service code:
package com.tcore.jboss.service;
public interface SingletonServiceExampleMBean
{
public String getMessage();
public void setMessage(String message);
public void printMessage();
public boolean isTheMasterNode();
public void startSingleton() throws Exception;
public void stopSingleton();
}
package com.tcore.jboss.service;
public class SingletonServiceExample implements SingletonServiceExampleMBean
{
private String message;
private boolean theMasterNode = false;
public void startSingleton() throws Exception
{
theMasterNode = true;
message = "I have been started! " + theMasterNode;
System.out.println("Starting with message: " + message);
}
public void stopSingleton()
{
theMasterNode = false;
message = "I have been stopped!" + theMasterNode;
System.out.println("Stopping with message: " + message);
}
public String getMessage()
{ return message; }
public void setMessage(String message)
{ this.message = message; }
public void printMessage()
{ System.out.println(message); }
public boolean isTheMasterNode()
{ return theMasterNode; }
}
Thanks!