JMX 简单学习

  简单理解,就是管理程序的一个协议,官方给出的答案是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务。用我们都能理解的大白话来说,JMX是一个框架,它提供了这样一种功能:通过使用JMX,我们可以实时查询应用程序中通过JMX向外公布的相应参数或者是其他应用数据,同时,我们也可以通过JMX来实时的调用应用程序使用JMX向外公布的接口,从而来实现一些操作。

   JMX 简单例子:(注意  JMS 中的MBean 接口  和 Bean 对象必须在一个包内,不然根据 ObjectMBean 和 Object 无法匹配上 )

     1:首先创建接口MBean,这里有个命名规则, 类名+Mbean作为接口名称,那么对象名称就是接口名称去掉 MBean,系统自动按照这个规则来匹配对象。

              同时,MBean 中的方法都是通过get 和set 来获取,注意get 或 set 后第一个字母要大写。

public interface UserMBean {

    public String getName();
    public void setName(String name);
    public void printName();
    public void printName(String name);
    
}

     2: 创建Bean对象 实现接口MBean

   
public class User implements UserMBean {

    private String name;
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void printName() {
        System.out.println("hello "+this.name);
    }

    public void printName(String name) {
        // TODO Auto-generated method stub
        System.out.println("你好:"+name);
    }

}

  3: 最重要的一点 定义 agent 层

package com.tide.bean;

import java.io.IOException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;

import com.sun.jdmk.comm.HtmlAdaptorServer;
import com.tide.agent.User;

public class UserAgent {

    public static void main(String args[]) throws MalformedObjectNameException,
            NullPointerException, InstanceAlreadyExistsException,
            MBeanRegistrationException, NotCompliantMBeanException, IOException {
        

        int rmiPort = 1099;  // 定义端口
        String jmxServerName = "TestJMXServer";    // 定义MBean 的名称

        MBeanServer mbs = MBeanServerFactory.createMBeanServer(jmxServerName);  // 通过工厂类获取MBeanServer,用来做MBean的容器
        
        /**
         * MBeanServer添加了一个htmladapter,这样我们就可以通过网页的方式来进行管理。
         */
        HtmlAdaptorServer adapter = new HtmlAdaptorServer();  
        ObjectName adapterName = new ObjectName(jmxServerName + ":name=" + "htmladapter");  
        adapter.setPort(8082);  
        adapter.start();  
        mbs.registerMBean(adapter, adapterName);  
 
        ObjectName objName = new ObjectName(jmxServerName + ":name=" + "User");  
        mbs.registerMBean(new User(), objName);  
          
 
        JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:" + rmiPort + "/" + jmxServerName);  
        System.out.println("JMXServiceURL: " + url.toString());  
        JMXConnectorServer jmxConnServer = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);  
        jmxConnServer.start();  
    }
}



        

猜你喜欢

转载自blog.csdn.net/guoxinjie17/article/details/77531965
JMX
今日推荐