jmxconfigurator.java
来自「JGRoups源码」· Java 代码 · 共 158 行
JAVA
158 行
package org.jgroups.jmx;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.jgroups.stack.ProtocolStack;import org.jgroups.util.Util;import javax.management.*;import java.util.Vector;import java.util.Set;import java.util.Iterator;/** * @author Bela Ban * @version $Id: JmxConfigurator.java,v 1.10 2006/08/09 13:02:21 belaban Exp $ */public class JmxConfigurator { static final Log log=LogFactory.getLog(JmxConfigurator.class); /** * Registers an already created channel with the MBeanServer. Creates an org.jgroups.jmx.JChannel which * delegates to the org.jgroups.JChannel and registers it. Optionally, this method will also try to * create one MBean proxy for each protocol in the channel's protocol stack, and register it as well. * @param channel * @param server * @param domain Has to be a JMX ObjectName of the domain, e.g. DefaultDomain:name=JGroups * @param register_protocols * @return org.jgroups.jmx.JChannel for the specified org.jgroups.JChannel */ public static org.jgroups.jmx.JChannel registerChannel(org.jgroups.JChannel channel, MBeanServer server, String domain, String cluster_name, boolean register_protocols) throws Exception { if(cluster_name == null) cluster_name=channel != null? channel.getClusterName() : null; if(cluster_name == null) cluster_name="null"; if(register_protocols) { String tmp=domain + ":type=protocol,cluster=" +cluster_name; registerProtocols(server, channel, tmp); } return registerChannel(channel, server, domain + ":type=channel,cluster=" +cluster_name); } /** * Registers an already created channel with the MBeanServer. Creates an org.jgroups.jmx.JChannel which * delegates to the org.jgroups.JChannel and registers it. * @param channel * @param server * @param name The JMX ObjectName * @return org.jgroups.jmx.JChannel for the specified org.jgroups.JChannel */ public static org.jgroups.jmx.JChannel registerChannel(org.jgroups.JChannel channel, MBeanServer server, String name) throws Exception { JChannel retval=new JChannel(channel); server.registerMBean(retval, new ObjectName(name)); return retval; } public static void unregisterChannel(MBeanServer server, ObjectName name) throws Exception { if(server != null) server.unregisterMBean(name); } public static void unregisterChannel(MBeanServer server, String name) throws Exception { if(server != null) server.unregisterMBean(new ObjectName(name)); } public static org.jgroups.jmx.JChannelFactory registerChannelFactory(org.jgroups.JChannelFactory factory, MBeanServer server, String name) throws Exception { JChannelFactory retval=new JChannelFactory(factory); server.registerMBean(retval, new ObjectName(name)); return retval; } /** * Takes all protocols of an existing stack, creates corresponding MBean proxies and registers them with * the MBean server * @param channel * @param prefix */ public static void registerProtocols(MBeanServer server, org.jgroups.JChannel channel, String prefix) throws Exception { ProtocolStack stack=channel.getProtocolStack(); Vector protocols=stack.getProtocols(); org.jgroups.stack.Protocol prot; org.jgroups.jmx.Protocol p=null; for(int i=0; i < protocols.size(); i++) { prot=(org.jgroups.stack.Protocol)protocols.get(i); try { p=findProtocol(prot); } catch(ClassNotFoundException e) { p=null; } catch(Throwable e) { log.error("failed creating a JMX wrapper instance for " + prot, e); p=null; } if(p == null) p=new org.jgroups.jmx.Protocol(prot); ObjectName prot_name=new ObjectName(prefix + ",protocol=" + prot.getName()); server.registerMBean(p, prot_name); } } public static void unregisterProtocols(MBeanServer server, org.jgroups.JChannel channel, String channel_name) { ProtocolStack stack=channel.getProtocolStack(); Vector protocols=stack.getProtocols(); org.jgroups.stack.Protocol prot; ObjectName prot_name=null; for(int i=0; i < protocols.size(); i++) { prot=(org.jgroups.stack.Protocol)protocols.get(i); try { prot_name=new ObjectName(channel_name + ",protocol=" + prot.getName()); server.unregisterMBean(prot_name); } catch(Throwable e) { log.error("failed to unregister " + prot_name, e); } } } /** * Unregisters object_name and everything under it * @param object_name */ public static void unregister(MBeanServer server, String object_name) throws Exception { Set mbeans=server.queryNames(new ObjectName(object_name), null); if(mbeans != null) { ObjectName name; for(Iterator it=mbeans.iterator(); it.hasNext();) { name=(ObjectName)it.next(); server.unregisterMBean(name); } } } protected static Protocol findProtocol(org.jgroups.stack.Protocol prot) throws ClassNotFoundException, IllegalAccessException, InstantiationException { Protocol p; String prot_name=prot.getClass().getName(); String clname=prot_name.replaceFirst("org.jgroups.", "org.jgroups.jmx."); Class cl=Util.loadClass(clname, JmxConfigurator.class); if(cl != null) { p=(Protocol)cl.newInstance(); p.attachProtocol(prot); return p; } return null; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?