2 Replies Latest reply on Nov 7, 2012 2:50 AM by stewart_g

    Jboss AS 6.0.0-Final - HASingleton Service Restart fail on cluster merge

    jojopotatoe

      Hi,

       

      we are using JBoss 6.0.0-Final version.

       

      We deployed a HASingleton Service as described in this document : http://community.jboss.org/wiki/WritingAClusteredHASingletonService

       

      All goes fine in singleton start/stop for the case : server shutdown.

       

      But when with this test case :

      - server 1 master and server 2 slave

      - we cut network on server 1

      - server 2 is now master and server 1 is still master too

      - we reconnect server 1

      - we saw ClusterMerges messages (refresh view ... bridge connection ...)

      - but the two HASingleton are started and none of them went into the restart procedure http://community.jboss.org/wiki/HASingletonAndClusterMerges

      (start and stop invoke)

       

      I can observe this on my beans but also on yours : if you look at HASingletonDeployer service in JMX Console it seems that MasterNode attribute is set to True on each cluster instance after my test case.

       

      Is this a problem in my code or the normal HAController implmentation ?

       

      Will Service and HA fonction support continue on next version ? (7.0.0)

       

      Here is my code :

       

      IHATest.java

       

      @Remote
      @RemoteBinding(jndiBinding = HATest.JNDI_NAME)
      public interface IHATest
      {
          public void create () throws Exception;
          public void destroy () throws Exception;
          public void start () throws Exception;
          public void stop () throws Exception;
          boolean isMasterNode();
      
          void startSingleton() throws NamingException;
          void stopSingleton() throws NamingException;
      }
      

       

      HATest.java

       

      @Service(objectName = HATest.OBJECT_NAME)
      @Management(IHATest.class)
      public class HATest implements IHATest
      {
          /** Variable de journalisation. */
          private static Logger log = LoggerFactory.getLogger(HATest.class);
      
      
          /** NOM JNDI. */
          public static final String JNDI_NAME = "myn/HATest/remote";
      
      
          /** Nom JNDI de l'EJB (pour les invocations de type lookup jndi). */
          public static final String OBJECT_NAME = "myn:service=HATest";
      
          /** Indique si le singleton est démaré en tant que MASTER. */
          public boolean masterNode = false;
      
          /** Reference interne. */
          private IHATest reference;
      
      
          // MANAGEMENT
          public void start() throws NamingException
          {
               log.info("MANAGEMENT START HATest");
               // Remove from local JNDI until started as a singleton,
               // but keep the reference locally so it could be restored later.
               Context ctx = new InitialContext();
               reference = (IHATest) ctx.lookup(JNDI_NAME);
               Util.unbind(ctx, JNDI_NAME);
          }
      
      
          public void stop()
          {
              log.info("MANAGEMENT STOP HATest");
          }
      
      
          public void startSingleton() throws NamingException
          {
               log.info("SINGLETON STARTED !!!");
               masterNode = true;        
      
               /*
               * Rebind to JNDI when started as singleton
               */
               Context ctx = new InitialContext();
               Util.rebind(ctx, JNDI_NAME, reference);
          }
      
      
          public void stopSingleton() throws NamingException
          {
               log.info("SINGLETON STOPPED !!!");
               masterNode = false;
      
               /*
               * Unbind from local JNDI when stopped
               */
               Context ctx = new InitialContext();
               Util.unbind(ctx, JNDI_NAME);
          }
      
      
          /*
           * (non-Javadoc)
           * 
           * @see fr.dcns.ha.IMan#create()
           */
          @Override
          public void create() throws Exception
          {
              // TODO Auto-generated method stub
      
      
          }
      
      
          /*
           * (non-Javadoc)
           * 
           * @see fr.dcns.ha.IMan#destroy()
           */
          @Override
          public void destroy() throws Exception
          {
              // TODO Auto-generated method stub
      
      
          }
      
      
          /*
           * (non-Javadoc)
           * 
           * @see fr.dcns.ha.IMan#isStarted()
           */
          public boolean isMasterNode()
          {
              return masterNode;
          } 
      

       

       

      jboss-service.xml

       

      <server>
           <mbean name="myn:service=HATest-Controller" 
                 code="org.jboss.ha.singleton.HASingletonController">
              <depends>myn:service=HATest</depends>
              <depends>HASingletonDeployerBarrierController</depends>
              <attribute name="HAPartition"><inject bean="HAPartition" /></attribute>
              <attribute name="TargetName">myn:service=HATest</attribute>
              <attribute name="TargetStartMethod">startSingleton</attribute>
              <attribute name="TargetStopMethod">stopSingleton</attribute>
              <attribute name="RestartOnMerge">true</attribute>
           </mbean>
      </server>