[jboss-cvs] JBossAS SVN: r77622 - trunk/cluster/src/main/org/jboss/ha/framework/server/util.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Aug 28 15:47:17 EDT 2008
Author: pferraro
Date: 2008-08-28 15:47:17 -0400 (Thu, 28 Aug 2008)
New Revision: 77622
Modified:
trunk/cluster/src/main/org/jboss/ha/framework/server/util/TopologyMonitorService.java
Log:
[JBAS-5441] Ensure misc HAPartition-based services can handle concurrent JGroups requests.
Code cleanup. No significant changes.
Modified: trunk/cluster/src/main/org/jboss/ha/framework/server/util/TopologyMonitorService.java
===================================================================
--- trunk/cluster/src/main/org/jboss/ha/framework/server/util/TopologyMonitorService.java 2008-08-28 19:45:01 UTC (rev 77621)
+++ trunk/cluster/src/main/org/jboss/ha/framework/server/util/TopologyMonitorService.java 2008-08-28 19:47:17 UTC (rev 77622)
@@ -21,20 +21,21 @@
*/
package org.jboss.ha.framework.server.util;
+import java.io.IOException;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Vector;
-import java.io.IOException;
+
+import javax.management.ObjectName;
import javax.naming.InitialContext;
-import javax.management.ObjectName;
+import org.apache.log4j.MDC;
import org.jboss.ha.framework.interfaces.HAPartition;
import org.jboss.ha.framework.interfaces.HAPartition.AsynchHAMembershipListener;
import org.jboss.ha.framework.server.HAPartitionLocator;
+import org.jboss.logging.Logger;
import org.jboss.system.ServiceMBeanSupport;
import org.jboss.system.server.ServerConfigUtil;
-import org.jboss.logging.Logger;
-import org.apache.log4j.MDC;
/** A cluster parition membership monitor. It can be used to view how
the nodes in a cluster are seeing the topology change using either email or
@@ -79,55 +80,63 @@
@author Scott.Stark at jboss.org
@version $Revision$
*/
-public class TopologyMonitorService extends ServiceMBeanSupport
+public class TopologyMonitorService
+ extends ServiceMBeanSupport
implements TopologyMonitorServiceMBean, AsynchHAMembershipListener
{
- private static final String CHANGE_NAME = TopologyMonitorService.class.getName()
- + ".membershipChanged";
+ private static final String CHANGE_NAME = TopologyMonitorService.class.getName() + ".membershipChanged";
+
private static Logger changeLog = Logger.getLogger(CHANGE_NAME);
- private String partitionName = ServerConfigUtil.getDefaultPartitionName();
- private HAPartition partition;
+
+ private volatile String partitionName = ServerConfigUtil.getDefaultPartitionName();
+
+ private volatile HAPartition partition;
+
private String hostname;
- private ObjectName triggerServiceName;
+ private volatile ObjectName triggerServiceName;
+
public TopologyMonitorService()
{
}
// --- Begin ServiceMBeanSupport overriden methods
-
-
+
+ @Override
protected void startService() throws Exception
{
- if (partition == null)
+ if (this.partition == null)
{
- partition = HAPartitionLocator.getHAPartitionLocator().getHAPartition(partitionName, null);
+ this.partition = HAPartitionLocator.getHAPartitionLocator().getHAPartition(this.partitionName, null);
}
// Register as a listener of cluster membership changes
- partition.registerMembershipListener(this);
- log.info("Registered as MembershipListener");
+ this.partition.registerMembershipListener(this);
+ this.log.info("Registered as MembershipListener");
try
{
- hostname = InetAddress.getLocalHost().getHostName();
+ this.hostname = InetAddress.getLocalHost().getHostName();
}
- catch(IOException e)
+ catch (IOException e)
{
- log.warn("Failed to lookup local hostname", e);
- hostname = "<unknown>";
+ this.log.warn("Failed to lookup local hostname", e);
+ this.hostname = "<unknown>";
}
}
+ @Override
protected void stopService() throws Exception
{
- partition.unregisterMembershipListener(this);
+ this.partition.unregisterMembershipListener(this);
}
-// --- End ServiceMBeanSupport overriden methods
-// --- Begin TopologyMonitorServiceMBean interface methods
+ // --- End ServiceMBeanSupport overriden methods
+
+ // --- Begin TopologyMonitorServiceMBean interface methods
public String getPartitionName()
{
- return (partition == null ? partitionName : partition.getPartitionName());
+ return (this.partition == null) ? this.partitionName : this.partition.getPartitionName();
}
+
public void setPartitionName(String name)
{
this.partitionName = name;
@@ -140,8 +149,9 @@
public ObjectName getTriggerServiceName()
{
- return triggerServiceName;
+ return this.triggerServiceName;
}
+
public void setTriggerServiceName(ObjectName triggerServiceName)
{
this.triggerServiceName = triggerServiceName;
@@ -149,81 +159,79 @@
public Vector getClusterNodes()
{
- Vector view = null;
try
{
InitialContext ctx = new InitialContext();
- String jndiName = "/HAPartition/" + partitionName;
+ String jndiName = "/HAPartition/" + this.partitionName;
HAPartition partition = (HAPartition) ctx.lookup(jndiName);
- view = partition.getCurrentView();
+ return partition.getCurrentView();
}
- catch(Exception e)
+ catch (Exception e)
{
- log.error("Failed to access HAPartition state", e);
+ this.log.error("Failed to access HAPartition state", e);
+ return null;
}
- return view;
}
-// --- End TopologyMonitorServiceMBean interface methods
+ // --- End TopologyMonitorServiceMBean interface methods
-// --- Begin HAMembershipListener interface methods
+ // --- Begin HAMembershipListener interface methods
/** Called when a new partition topology occurs.
* @param deadMembers A list of nodes that have died since the previous view
* @param newMembers A list of nodes that have joined the partition since
* the previous view
* @param allMembers A list of nodes that built the current view
*/
- public void membershipChanged(final Vector deadMembers, final Vector newMembers,
- final Vector allMembers)
+ public void membershipChanged(final Vector deadMembers, final Vector newMembers, final Vector allMembers)
{
MDC.put("RegexEventEvaluator", "End membershipChange.*");
ArrayList removed = new ArrayList();
ArrayList added = new ArrayList();
ArrayList members = new ArrayList();
- changeLog.info("Begin membershipChanged info, hostname="+hostname);
- changeLog.info("DeadMembers: size="+deadMembers.size());
- for(int m = 0; m < deadMembers.size(); m ++)
+ changeLog.info("Begin membershipChanged info, hostname=" + this.hostname);
+ changeLog.info("DeadMembers: size=" + deadMembers.size());
+ for (int m = 0; m < deadMembers.size(); m++)
{
- AddressPort addrInfo = getMemberAddress(deadMembers.get(m));
+ AddressPort addrInfo = this.getMemberAddress(deadMembers.get(m));
removed.add(addrInfo);
changeLog.info(addrInfo);
}
- changeLog.info("NewMembers: size="+newMembers.size());
- for(int m = 0; m < newMembers.size(); m ++)
+ changeLog.info("NewMembers: size=" + newMembers.size());
+ for (int m = 0; m < newMembers.size(); m++)
{
- AddressPort addrInfo = getMemberAddress(newMembers.get(m));
+ AddressPort addrInfo = this.getMemberAddress(newMembers.get(m));
added.add(addrInfo);
changeLog.info(addrInfo);
}
- changeLog.info("AllMembers: size="+allMembers.size());
- for(int m = 0; m < allMembers.size(); m ++)
+ changeLog.info("AllMembers: size=" + allMembers.size());
+ for (int m = 0; m < allMembers.size(); m++)
{
- AddressPort addrInfo = getMemberAddress(allMembers.get(m));
+ AddressPort addrInfo = this.getMemberAddress(allMembers.get(m));
members.add(addrInfo);
changeLog.info(addrInfo);
}
// Notify the trigger MBean
- if( triggerServiceName != null )
+ if (this.triggerServiceName != null)
{
- changeLog.info("Invoking trigger service: "+triggerServiceName);
+ changeLog.info("Invoking trigger service: " + this.triggerServiceName);
try
{
- Object[] params = {removed, added, members, CHANGE_NAME};
- String[] sig = {"java.util.ArrayList", "java.util.ArrayList",
- "java.util.ArrayList", "java.lang.String"};
- server.invoke(triggerServiceName, "membershipChanged", params, sig);
+ Object[] params = { removed, added, members, CHANGE_NAME };
+ String[] sig = { "java.util.ArrayList", "java.util.ArrayList", "java.util.ArrayList", "java.lang.String" };
+ this.server.invoke(this.triggerServiceName, "membershipChanged", params, sig);
}
- catch(Throwable t)
+ catch (Throwable t)
{
- changeLog.error("Failed to notify trigger service: "+triggerServiceName, t);
- log.debug("Failed to notify trigger service: "+triggerServiceName, t);
+ changeLog.error("Failed to notify trigger service: " + this.triggerServiceName, t);
+ this.log.debug("Failed to notify trigger service: " + this.triggerServiceName, t);
}
}
- changeLog.info("End membershipChanged info, hostname="+hostname);
+ changeLog.info("End membershipChanged info, hostname=" + this.hostname);
MDC.remove("RegexEventEvaluator");
}
-// --- End HAMembershipListener interface methods
+ // --- End HAMembershipListener interface methods
+
/** Use reflection to access the address InetAddress and port if they exist
* in the Address implementation
*/
@@ -232,24 +240,24 @@
AddressPort info = null;
try
{
- org.jboss.ha.framework.interfaces.ClusterNode node =
- (org.jboss.ha.framework.interfaces.ClusterNode)addr;
+ org.jboss.ha.framework.interfaces.ClusterNode node = (org.jboss.ha.framework.interfaces.ClusterNode) addr;
InetAddress inetAddr = node.getIpAddress();
Integer port = new Integer(node.getPort());
info = new AddressPort(inetAddr, port);
}
- catch(Exception e)
+ catch (Exception e)
{
- log.warn("Failed to obtain InetAddress/port from addr: "+addr, e);
+ this.log.warn("Failed to obtain InetAddress/port from addr: " + addr, e);
}
return info;
}
public static class AddressPort
{
- InetAddress addr;
- Integer port;
+ private InetAddress addr;
+ private Integer port;
+
AddressPort(InetAddress addr, Integer port)
{
this.addr = addr;
@@ -258,23 +266,28 @@
public Integer getPort()
{
- return port;
+ return this.port;
}
+
public InetAddress getInetAddress()
{
- return addr;
+ return this.addr;
}
+
public String getHostAddress()
{
- return addr.getHostAddress();
+ return this.addr.getHostAddress();
}
+
public String getHostName()
{
- return addr.getHostName();
+ return this.addr.getHostName();
}
+
+ @Override
public String toString()
{
- return "{host("+addr+"), port("+port+")}";
+ return "{host(" + this.addr + "), port(" + this.port + ")}";
}
}
}
More information about the jboss-cvs-commits
mailing list