JMX学习笔记(三)-MXBean
在MBean中有只要遵循以下两个规则,我们就可以在jconsole中动态的改变MBean中的属性值
1. JMX中要定义接口必须以xxxMBean的规范定义
2. 得有类实现xxxMBean接口
例如:
package com.dxz.mbean.demo3;
public interface ServerConfigureMBean {
    public int getPort();
    public void setPort(int port);
    public String getHost();
    public void setHost(String host);
    public int getMaxThread();
    public void setMaxThread(int maxThread);
    public int getMinThread();
    public void setMinThread(int minThread);
}
接着实现这个MBean:
package com.dxz.mbean.demo3;
public class ServerConfigure implements ServerConfigureMBean {
    private int port;
    private String host;
    private int maxThread;
    private int minThread;
    public ServerConfigure(int port, String host, int maxThread, int minThread) {
        this.port = port;
        this.host = host;
        this.maxThread = maxThread;
        this.minThread = minThread;
    }
    public int getPort() {
        return port;
    }
    public void setPort(int port) {
        this.port = port;
    }
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
    public int getMaxThread() {
        return maxThread;
    }
    public void setMaxThread(int maxThread) {
        this.maxThread = maxThread;
    }
    public int getMinThread() {
        return minThread;
    }
    public void setMinThread(int minThread) {
        this.minThread = minThread;
    }
}
测试:
package com.dxz.mbean.demo3; import java.lang.management.ManagementFactory; import javax.management.MBeanServer;
import javax.management.ObjectName; public class ServerTest { public static void main(String[] args) throws Exception {
testServerConfigureMBean();
} public static void testServerConfigureMBean() throws Exception {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ServerConfigure serverConfigure = new ServerConfigure(8080, "china.com", 20, 100); ObjectName serverName = new ObjectName("com.dxz.mbean.demo3:type=ServerConfigure");
mbs.registerMBean(serverConfigure, serverName);
System.out.println("Waiting...");
Thread.sleep(Long.MAX_VALUE);
} }
打开jconsole:

但是以上这些ServerConfigure的属性都是基本类型,包含在Java.lang.*里,设想,如果说jconsole在类外一个远端的jvm上,如果这里的属性是一个自定义对象,远端的jvm可能不知道该类型的对象:
修改上边的ServerConfigre,使他成为一个聚合对象,去掉ServerConfigureMBean接口实现:
测试结果,打开jconsole查看:

为了让与远端JVM认识该对象,我们需要将ServerMbean改为ServerMXBean,并使用java.beans.ConstructorProperties注解告诉JVM怎样组装该对象:
package com.dxz.mbean.demo5;
public interface ServerMXBean {
    public ServerConfigure getServerConfigure();   
    public void setServerConfigure(ServerConfigure serverConfigure);   
    public void defaultServerConfigure();
}
1. 使用java.beans.ConstructorProperties注解:
package com.dxz.mbean.demo5;
import java.beans.ConstructorProperties;
public class ServerConfigure {
    private int port;
    private String host;
    private int maxThread;
    private int minThread;
    /**
     * 加入@ConstructorProperties注解
     */
    @ConstructorProperties({ "port", "host", "maxThread", "minThread" }) //如果没有会报错,Caused by: java.io.InvalidObjectException: Do not know how to make a com.dxz.mbean.demo5.ServerConfigure from a CompositeData: no method from(CompositeData); no constructor has @ConstructorProperties annotation; does not have a public no-arg constructor; not an interface
    public ServerConfigure(int port, String host, int maxThread, int minThread) {
        this.port = port;
        this.host = host;
        this.maxThread = maxThread;
        this.minThread = minThread;
    }
    public int getPort() {
        return port;
    }
    public void setPort(int port) {
        this.port = port;
    }
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
    public int getMaxThread() {
        return maxThread;
    }
    public void setMaxThread(int maxThread) {
        this.maxThread = maxThread;
    }
    public int getMinThread() {
        return minThread;
    }
    public void setMinThread(int minThread) {
        this.minThread = minThread;
    }
}
package com.dxz.mbean.demo5;
public class Server implements ServerMXBean {
    /**
     * 封装
     */
    private ServerConfigure serverConfigure;
    public Server(ServerConfigure serverConfigure) {
        this.serverConfigure = serverConfigure;
    }
    @Override
    public ServerConfigure getServerConfigure() {
        synchronized (serverConfigure) {
            return this.serverConfigure;
        }
    }
    @Override
    public void setServerConfigure(ServerConfigure serverConfigure) {
        synchronized (serverConfigure) {
            this.serverConfigure = serverConfigure;
        }
    }
    @Override
    public void defaultServerConfigure() {
        synchronized (serverConfigure) {
            serverConfigure.setPort(80);
            serverConfigure.setHost("www.haitao.com");
            serverConfigure.setMinThread(10);
            serverConfigure.setMaxThread(500);
        }
    }
}
package com.dxz.mbean.demo5; import java.lang.management.ManagementFactory; import javax.management.MBeanServer;
import javax.management.ObjectName; public class ServerTest {
public static void main(String[] args) throws Exception {
testServerMBean();
} public static void testServerMBean() throws Exception {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ServerConfigure serverConfigure = new ServerConfigure(8080,
"www.china5.com", 20, 100); Server server = new Server(serverConfigure); ObjectName serverName = new ObjectName(
"com.dxz.mbean.demo5:type=Server");
mbs.registerMBean(server, serverName);
System.out.println("Waiting...");
Thread.sleep(Long.MAX_VALUE);
}
}
测试代码一样,就不再重复,最后运行测试,查看jconsole:

双击值,我们将会看到:

实际上MXBean的概念很简单,就是定义xxxMXBean接口,然后实现这个接口,与MBean类似,为了阐述这个MXBean与MBean的不同才列出这么多代码,希望大家能理解:)
JMX学习笔记(三)-MXBean的更多相关文章
- Oracle学习笔记三 SQL命令
		SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL) 
- [Firefly引擎][学习笔记三][已完结]所需模块封装
		原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ... 
- JSP学习笔记(三):简单的Tomcat Web服务器
		注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ... 
- java之jvm学习笔记三(Class文件检验器)
		java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ... 
- VSTO学习笔记(三) 开发Office 2010 64位COM加载项
		原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ... 
- Java IO学习笔记三
		Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ... 
- NumPy学习笔记 三 股票价格
		NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ... 
- Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam
		中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ... 
- Learning ROS for Robotics Programming Second Edition学习笔记(三) indigo rplidar rviz slam
		中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ... 
随机推荐
- nginx+php-fpm 502 bad gateway
			输出日志配置: http://blog.csdn.net/wzy_1988/article/details/8486888 解决方案: http://www.cnblogs.com/jackluo/p ... 
- MBProgressHUD ---
			1,MBProgressHUD常用属性和用法Demo - (void)testMBProgressHUD { NSLog(@"test MBProgressHUD "); /* 要 ... 
- Linux必学的60个命令
			inux必学的60个命令Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想 ... 
- (转)Const,Const函数,Const变量,函数后面的Const
			本文转自http://www.cnblogs.com/Fancyboy2004/archive/2008/12/23/1360810.html 看到const 关键字,C++程序员首先想到的可能是co ... 
- WDS无线桥接
			因为放假回家,长时间不在家,家里也没什么人,所以也就没有网可以用.为了两个月办宽带又不值得,太过浪费了.于是就只能蹭网用了.当然,要和邻居打个招呼或者你能搞定密码的情况下不打招呼(嘿嘿...).但是有 ... 
- dtGrid插件集成到Angular环境实现表格化数据展现
			00没有抱怨的世界 周末效率好低,两天没更了,看看这看看那,装了个win10发现触摸板驱动不适配,然后找了好久都不行,23333. AngularJS用的时间很短,高级的用法有点吃不消了,$diges ... 
- Matlab实现ItemBasedCF算法
			感谢开源大神,慢慢收集资料.网上资料很少,我在找如何用matlab处理movielens数据集时找到的. 用ml-100k这个数据集,包括主函数和相似度函数. 代码托管于CSDN. 
- js中replace的正则替换
			temp: video":"\t<ul class=\"g-list tabview-cont on\">\t\r\n\t\t<li clas ... 
- TaskTracker执行map或reduce任务的过程(二)
			上次说到,当MapLauncher或ReduceLancher(用于执行任务的线程,它们扩展自TaskLauncher),从它们所维护的LinkedList也即队列中获取到TaskInProgress ... 
- auto_ptr,shared_ptr 智能指针的使用
			Q: 那个auto_ptr是什么东东啊?为什么没有auto_array?A: 哦,auto_ptr是一个很简单的资源封装类,是在<memory>头文件中定义的.它使用“资源分配即初始化”技 ... 
