在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的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  3. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  4. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  5. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  6. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  7. NumPy学习笔记 三 股票价格

    NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...

  8. Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(三) indigo rplidar rviz slam

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

随机推荐

  1. 浅谈JavaSccript函数与对象

    函数 解剖函数 function One(leve1 , leve2){ //code return leve1+leve2 } 注释: 形参不需要加上类型: return语句为可选,没有return ...

  2. 首页banner焦点图自动轮播效果

    今天来介绍一下我前两天写一个小任务的时候遇到的一些问题,如果能够有所帮助或者启发,那将是我的荣幸. <div class="banner"> <a class=& ...

  3. 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 ...

  4. 1045: [HAOI2008] 糖果传递 - BZOJ

    Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1.Input 小朋友个数n 下面n行 aiOutput 求使所有人获得均等糖果的 ...

  5. yum安装gcc

    如果服务器是自己的,并且机器就在身边,那什么都不用说了,缺少gcc顶多就是重新放入安装盘,把开发工具包安装上.但是如果是租的服务器,托管服务 方那帮人又搞不懂你说的啥子gcc,要安装gcc实在是太麻烦 ...

  6. springMVC上传图片

    http://blog.csdn.net/cheung1021/article/details/7084673/ http://toutiao.com/a6293854906445021442/ 工程 ...

  7. 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 ...

  8. "Principles of Reactive Programming" 之<Actors are Distributed> (2)

    Actor Path 我们知道actor是有层级的(hierarchical),第.每个actor在它的父actor的名字空间下都有一个名字.这样就构成了一个树状的结构,就像是文件系统.每个actor ...

  9. 线索二叉树Threaded binary tree

    摘要   按照某种遍历方式对二叉树进行遍历,可以把二叉树中所有结点排序为一个线性序列.在该序列中,除第一个结点外每个结点有且仅有一个直接前驱结点:除最后一个结点外每一个结点有且仅有一个直接后继结点.这 ...

  10. VMware linux与windows文件共享

    将要共享的文件做成一个iso文件,然后打开VMware