RmiAdaptor.java 3.14 KB
package com.sitech.jmx.adaptor;

import com.sitech.base.AgentProperties;
import com.sitech.jmx.manage.MBeanManager;
import org.apache.log4j.Logger;

import javax.management.*;
import javax.management.remote.*;

/**
 * RMI适配器
 *
 * @author linxc
 */
public class RmiAdaptor {
    private static Logger logger = Logger.getLogger(AgentProperties.class);
    private static RmiAdaptor adaptor = new RmiAdaptor();

    private RmiAdaptor() {

    }

    public static RmiAdaptor getInstance() {
        return adaptor;
    }

    public void regist(MBeanServer mbs) {
        String sUrl = "service:jmx:rmi://" + AgentProperties.IP_ADDR;
        if (null != AgentProperties.JMX_STUB_PORT && !"".equals(AgentProperties.JMX_STUB_PORT)) {
            sUrl += ":" + AgentProperties.JMX_STUB_PORT;
        }

        sUrl += "/jndi/rmi://" + AgentProperties.IP_ADDR + ":"
                + AgentProperties.JMX_PORT + "/jmx";

        try {
            ObjectName adaptorName = ObjectName
                    .getInstance("naming:type=rmiAdaptor");
            mbs.createMBean("mx4j.tools.naming.NamingService", adaptorName);

            Attribute port = new Attribute("Port", Integer
                    .parseInt(AgentProperties.JMX_PORT));
            mbs.setAttribute(adaptorName, port);
            mbs.invoke(adaptorName, "start", null, null);

            JMXServiceURL url = new JMXServiceURL(sUrl);

            JMXConnectorServer connectorServer = JMXConnectorServerFactory
                    .newJMXConnectorServer(url, null, mbs);

            connectorServer.start();

            logger.info("Regist RMI Adaptor SUCCESS, URL=" + sUrl);

            registDefaultMBean();
        } catch (Exception e) {
            logger.warn("Regist RMI Adaptor FAILED, URL=" + sUrl, e);
        }
    }

    private void registDefaultMBean() {
        MBeanManager.getInstance().registCollMBean("HostName:type=MBean","com.sitech.jmx.mbean.HostName");
    }

    public static void main(String[] args) throws Exception {
//        MBeanServer mbs = MBeanServerFactory.createMBeanServer(AgentProperties.MBEAN_SERVER_DOMAIN);
//        MBeanManager manager = MBeanManager.getInstance();
//        manager.setMBeanServer(mbs);
//
//        RmiAdaptor.getInstance().regist( mbs);

        String sUrl = "service:jmx:rmi://" + AgentProperties.IP_ADDR;
        if (null != AgentProperties.JMX_STUB_PORT && !"".equals(AgentProperties.JMX_STUB_PORT)) {
            sUrl += ":" + AgentProperties.JMX_STUB_PORT;
        }

        sUrl += "/jndi/rmi://" + AgentProperties.IP_ADDR + ":"
                + AgentProperties.JMX_PORT + "/jmx";

        JMXConnector connector = JMXConnectorFactory.newJMXConnector(
                new JMXServiceURL(sUrl), null);

        connector.connect();

        MBeanServerConnection con = connector.getMBeanServerConnection();

        // 采集参数
        Object[] params = new Object[] { "linxc" };
        // MBean实例名
        ObjectName objName = new ObjectName("HostName:type=MBean");

        String[] signature = new String[] { "java.lang.String" };

        Object result = con.invoke(objName, "getHostName", params, signature);

        System.out.println(result);

    }

}