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 + -
显示快捷键?