2 Replies Latest reply on Mar 28, 2007 12:44 PM by karanmg

    How to auto-start my singleton service?

      I 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!


        • 1. Re: How to auto-start my singleton service?
          brian.stansberry

          Try renaming startSingleton() to start() and stopSingleton() to stop().

          Methods create()/start()/stop()/destroy() are names of the standard lifecycle callbacks that the ServiceController will invoke as dependencies are satisfied. Since you're getting your HASingleton behavior via an mbean dependency, the callbacks you want to expose should be the standard lifecycle ones.

          You probably got the names startSingleton()/stopSingleton() from some docs that deal with HASingletonSupport and related classes like HASingletonController. That's a different way to do an HASingleton.

          • 2. Re: How to auto-start my singleton service?

            It worked. Thanks!