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 ...
随机推荐
- 浅谈JavaSccript函数与对象
函数 解剖函数 function One(leve1 , leve2){ //code return leve1+leve2 } 注释: 形参不需要加上类型: return语句为可选,没有return ...
- 首页banner焦点图自动轮播效果
今天来介绍一下我前两天写一个小任务的时候遇到的一些问题,如果能够有所帮助或者启发,那将是我的荣幸. <div class="banner"> <a class=& ...
- oracle 导出数据和导入数据
导出数据 exp zl_gj/zlkj@gqxt grants=y tables=(zl_gj.ckgj,zl_gj.gjlx,zl_gj.rkgj) file=c:\gj.dmp log=c:\g ...
- 1045: [HAOI2008] 糖果传递 - BZOJ
Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1.Input 小朋友个数n 下面n行 aiOutput 求使所有人获得均等糖果的 ...
- yum安装gcc
如果服务器是自己的,并且机器就在身边,那什么都不用说了,缺少gcc顶多就是重新放入安装盘,把开发工具包安装上.但是如果是租的服务器,托管服务 方那帮人又搞不懂你说的啥子gcc,要安装gcc实在是太麻烦 ...
- springMVC上传图片
http://blog.csdn.net/cheung1021/article/details/7084673/ http://toutiao.com/a6293854906445021442/ 工程 ...
- Searching in a rotated and sorted array
Given a sorted array that has been rotated serveral times. Write code to find an element in this arr ...
- "Principles of Reactive Programming" 之<Actors are Distributed> (2)
Actor Path 我们知道actor是有层级的(hierarchical),第.每个actor在它的父actor的名字空间下都有一个名字.这样就构成了一个树状的结构,就像是文件系统.每个actor ...
- 线索二叉树Threaded binary tree
摘要 按照某种遍历方式对二叉树进行遍历,可以把二叉树中所有结点排序为一个线性序列.在该序列中,除第一个结点外每个结点有且仅有一个直接前驱结点:除最后一个结点外每一个结点有且仅有一个直接后继结点.这 ...
- VMware linux与windows文件共享
将要共享的文件做成一个iso文件,然后打开VMware