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 ...
随机推荐
- Java中的break与continue区别
break跳出当前循环执行循环下面的程序, 如果break出现在嵌套循环的内层循环, 则break语句只会跳出当前层的循环; 当程序执行到continue时时, 则跳过本次循环程序重新回到循环开始继续 ...
- Webx框架自带的petstore
Webx框架:http://openwebx.org/ petstore:webx3/webx-sample/petstore/tags/3.0/petstore 编译之后:mvn jetty:run ...
- linux驱动系列之arm汇编
在arm平台学习linux时,会遇到arm汇编指令,arm汇编指令与8086汇编指令很多地方都不同,在此记下来以免后面忘了,同时在学习了汇编指令之后分析一些汇编指令编写的代码. 一.相对跳转指令b.b ...
- google protobuf 使用示例
定义.proto接口文件 package tutorial; message Person { required ; required int32 id = ; //unique ID number ...
- 【高斯消元】BZOJ 1013: [JSOI2008]球形空间产生器sphere
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁 ...
- 快速排序(quicksort)算法实现
快速排序(quicksort)是分治法的典型例子,它的主要思想是将一个待排序的数组以数组的某一个元素X为轴,使这个轴的左侧元素都比X大,而右侧元素都比X小(从大到小排序).然后以这个X在变换后数组的位 ...
- Nginx、LVS及HAProxy负载均衡软件的优缺点详解
http://www.csdn.net/article/2014-07-24/2820837
- jquery ajax 访问webServer的xml文件
最近项目中要使用到通过ajax访问webServer的xml文件,通过下面的方式可以直接访问webServer的xml文件,不需要在web.xml中进行任何配置.它的返回参数就是服务器上的xml文件. ...
- java:复写equals实例
class User { String name; int age; /* *比较过程思路: *1.两个对象指向位置相同,那么他们就相等,return后跳出函数,不再往下执行 *2.指向位置不同,有3 ...
- SRM 585 DIV1 L2
记录dp(i, j)表示前i种卡片的排列,使得LISNumber为j的方法数. #include <iostream> #include <vector> #include & ...