jmx學習示例

1.jmx是什麼

JMX是Java Management Extensioins的縮寫,功能是對java程序的管理。不太好理解,下面給出一個例子來說明。

2.實例

package swim;

public interface UserMBean {

    public void changeName(String name);

    public void printName();
}
package swim;

public class User implements UserMBean {

    public String name = "default";

    @Override
    public void changeName(String name) {

        this.name = name;
    }

    @Override
    public void printName() {

        System.out.println(this.name);
    }
}
package swim;

import java.lang.management.ManagementFactory;

import javax.management.InstanceAlreadyExistsException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import javax.management.ReflectionException;

public class jmx1_1 {


        public static void main(String args[]) {

                MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
                try {
                        ObjectName name = new ObjectName("swim:type=User");
                        User uBean = new User();
                        mbs.registerMBean(uBean, name);

                        while(true){

                                System.out.println(mbs.invoke(name, "printName", null, null));
                                Thread.sleep(5000);
                        }

                } catch (MalformedObjectNameException e) {
                        e.printStackTrace();
                } catch (InstanceAlreadyExistsException e) {
                        e.printStackTrace();
                } catch (MBeanRegistrationException e) {
                        e.printStackTrace();
                } catch (NotCompliantMBeanException e) {
                        e.printStackTrace();
                } catch (InstanceNotFoundException e) {
                        e.printStackTrace();
                } catch (ReflectionException e) {
                        e.printStackTrace();
                } catch (MBeanException e) {
                        e.printStackTrace();
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }
        }
}

可以看到對User的操作可以通過MBeanServer 來控制,這個就很強大了啦。進一步來說還可以這樣。運行Jconsole命令。

這裏寫圖片描述

點擊printName,可以執行程序中的printName函數。試試changeName,可以看到值也變了。是不是厲害了。

這裏寫圖片描述

3.概念上的東西

一個MBean代表一個被管理對象。這個對象需要暴露一些供讀寫的屬性,以及可以調用的方法。JMX平臺定義了4種MBean,標準、動態、開放、模型。上面的實例是標準型的MBean,這裏給出一個入門級的瞭解,至於其它類型的MBean,請參看http://blog.csdn.net/u013256816/article/details/52800742(從零開始玩轉JMX系列)

本文是在zookeeper代碼閱讀中看到的關於JMX部分代碼後,不瞭解其意義然後瞭解而形成的文章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章