/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.ha.singleton;
import javax.management.Notification;
import org.jboss.ha.framework.interfaces.HASingleton;
import org.jboss.ha.framework.interfaces.HASingletonElectionPolicy;
import org.jboss.ha.framework.interfaces.HASingletonLifecycle;
import org.jboss.ha.framework.server.HAServiceRpcHandler;
import org.jboss.ha.framework.server.HASingletonImpl;
import org.jboss.ha.framework.server.HASingletonRpcHandler;
import org.jboss.ha.jmx.AbstractHAServiceMBeanSupport;
/**
* Base class for HA-Singleton legacy mbean services.
*
* @author <a href="mailto:ivelin@apache.org">Ivelin Ivanov</a>
* @author <a href="mailto:scott.stark@jboss.org">Scott Stark</a>
* @author <a href="mailto:dimitris@jboss.org">Dimitris Andreadis</a>
* @author <a href="mailto:galder.zamarreno@jboss.com">Galder Zamarreno</a>
* @author <a href="mailto:pferraro@redhat.com">Paul Ferraro</a>
* @version $Revision: 87733 $
*/
public class HASingletonSupport
extends AbstractHAServiceMBeanSupport<HASingleton<Notification>>
implements HASingleton<Notification>, HASingletonRpcHandler<Notification>
{
/**
* @see org.jboss.ha.framework.interfaces.HASingletonMBean#isMasterNode()
*/
public boolean isMasterNode()
{
return this.getHAService().isMasterNode();
}
/**
* @see org.jboss.ha.framework.interfaces.HASingleton#setElectionPolicy(org.jboss.ha.framework.interfaces.HASingletonElectionPolicy)
*/
public void setElectionPolicy(HASingletonElectionPolicy electionPolicy)
{
this.getHAService().setElectionPolicy(electionPolicy);
}
/**
* @see org.jboss.ha.framework.interfaces.HASingleton#getElectionPolicy()
*/
public HASingletonElectionPolicy getElectionPolicy()
{
return this.getHAService().getElectionPolicy();
}
/**
* @see org.jboss.ha.framework.interfaces.HASingleton#getRestartOnMerge()
*/
public boolean getRestartOnMerge()
{
return this.getHAService().getRestartOnMerge();
}
/**
* @see org.jboss.ha.framework.interfaces.HASingleton#setRestartOnMerge(boolean)
*/
public void setRestartOnMerge(boolean restartOnMerge)
{
this.getHAService().setRestartOnMerge(restartOnMerge);
}
// Public --------------------------------------------------------
/**
* Extending classes should override this method and implement the custom
* singleton logic. Only one node in the cluster is the active master.
* If the current node is elected for master, this method is invoked.
* When another node is elected for master for some reason, the
* stopSingleton() method is invokded.
* <p>
* When the extending class is a stateful singleton, it will
* usually use putDistributedState() and getDistributedState() to save in
* the cluster environment information that will be needed by the next node
* elected for master should the current master node fail.
*
* @see HASingletonLifecycle
*/
public void startSingleton()
{
this.getHAService().startSingleton();
}
/**
* Extending classes should override this method and implement the custom
* singleton logic. Only one node in the cluster is the active master.
* If the current node is master and another node is elected for master, this
* method is invoked.
*
* @see HASingletonLifecycle
*/
public void stopSingleton()
{
this.getHAService().stopSingleton();
}
/**
* @see org.jboss.ha.jmx.AbstractHAServiceMBeanSupport#createHAService()
*/
@Override
protected HASingleton<Notification> createHAService()
{
return new HASingletonService();
}
/**
* @see org.jboss.ha.framework.server.HASingletonRpcHandler#stopOldMaster()
*/
public void stopOldMaster() throws Exception
{
((HASingletonService) this.getHAService()).stopIfMaster();
}
private class HASingletonService extends HASingletonImpl<Notification>
{
HASingletonService()
{
super(HASingletonSupport.this, HASingletonSupport.this, HASingletonSupport.this);
}
/**
* Expose HASingletonSupport subclass methods to rpc handler
* @see org.jboss.ha.framework.server.HASingletonImpl#getRpcHandler()
*/
@Override
protected HAServiceRpcHandler<Notification> getRpcHandler()
{
return HASingletonSupport.this;
}
/**
* Expose to parent class
* @see org.jboss.ha.framework.server.HASingletonImpl#stopIfMaster()
*/
@Override
protected void stopIfMaster()
{
super.stopIfMaster();
}
}
}