MBean其实也是JavaBean的一种,但是MBean往往代表的是JMX中的一种可以被管理的资源。MBean会通过接口定义,给出这些资源的一些特定操作:
- 属性的读和写操作;
- 可以被执行的操作;
- 关于自己的描述信息;
MBean可以看作是JavaBean的一种特殊形式,其定义是符合JavaBean的规范的。但是MBean在定义是,首先需要定义一个名字结尾为“MBean”的接口,例如:HelloMBean,然后这个接口的实现类的名字必须叫做Hello。
而MXBean与MBean的区别主要是在于在接口中会引用到一些其他类型的类时,其表现方式的不一样。在MXBean中,如果一个MXBean的接口定义了一个属性是一个自定义类型,如MemoryMXBean中定义了heapMemoryUsage属性,这个属性是MemoryUsage类型的,当JMX使用这个MXBean时,这个MemoryUsage就会被转换成一种标准的类型,这些类型被称为开放类型,是定义在
javax.management.openmbean包中的。而这个转换的规则是,如果是原生类型,如int或者是String,则不会有变化,但如果是其他自定义类型,则被转换成CompositeDataSupport类。
用两个简单的例子来比较一下MBean与MXBean的区别。
定义一个MBean:
public interface HelloMBean { public int getAge(); public String getName(); public String getEmail(); public void setEmail(String email); public String sayHello(); }
这个MBean定义了三个属性:age,name和email,其中age和name是只读的。同时定义了一个操作,sayHello。下面是这个MBean的实现:
public class Hello implements HelloMBean { private final String name; private final int age; private String email; public Hello(String name, int age, String email) { this.name = name; this.age = age; this.email = email; } @Override public int getAge() { return age; } @Override public String getName() { return name; } @Override public String getEmail() { return email; } @Override public void setEmail(String email) { this.email = email; } @Override public String sayHello() { return "Hello, I'm " + name + "."; } }
上面这个MBean的实现,可以看到,这个实现类的名字与MBean接口的定义是相同的。然后再写一个调用的类:
public class MyMBeanServer { public static void main(String[] args) throws Exception { MBeanServer server = ManagementFactory.getPlatformMBeanServer(); ObjectName mbeanName = new ObjectName("me.clarenceau.jmx.mbean:type=Hello"); Hello mbean = new Hello("ClarenceAu", 23, "ozhencong@gmail.com"); server.registerMBean(mbean, mbeanName); System.out.println("Wait ..."); Thread.sleep(Long.MAX_VALUE); } }
然后启动这个类,再通过jconsole就可以看到这个mbean的属性以及调用这个mbean的操作。
然后下面可以试一下定义一个自定义类型,然后在mbean中作为属性来返回,我们定义一个Book类型:
public class Book { public String name; public double price; public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } }
在原来的mbean上增加两个操作:
public Book getBook(); public void addBook(Book book);
再次启动server,看看这次效果会怎么样:
可以看到,属性和操作都多了刚才定义的内容。但是如果希望看到book的内容时就会看到下面的情况:
这时,我们把这个mbean定义为一个MXBean:
public interface HelloMXBean { public int getAge(); public String getName(); public String getEmail(); public void setEmail(String email); public String sayHello(); public Book getBook(); public void addBook(Book book); }
并且在Server类启动时,为mbean添加几本书:
public class MyMXBeanServer { public static void main(String[] args) throws Exception { MBeanServer server = ManagementFactory.getPlatformMBeanServer(); ObjectName mbeanName = new ObjectName("me.clarenceau.jmx.mxbean:type=Hello"); Hello mbean = new Hello("ClarenceAu", 23, "ozhencong@gmail.com"); mbean.addBook(new Book("Thinking in Java", 99.0)); mbean.addBook(new Book("Design Pattern", 59.0)); server.registerMBean(mbean, mbeanName); System.out.println("Wait ..."); Thread.sleep(Long.MAX_VALUE); } }
启动后,我们可以再通过jconsole看到下图:
此时,book已经被转换成了CompositeDataSupport类型,双击这个这个属性,则可以看到:
这个就是MBean与MXBean的区别所在。
相关推荐
JMX一步步来JMX一步步来JMX一步步来JMX一步步来
jmx 实例 rmi mbean,采用rmi方式进行jmx的mbean管理,通过这个实例能够了解jmx的应用
NULL 博文链接:https://risheng.iteye.com/blog/1455326
Java分布式应用学习笔记09JMX-MBean的介绍
JMX 1.2.1 Reference Implementation(重点) Include com.sun.jdmk.comm.HtmlAdaptorServer class http://www.sun.com/software/jdmk/ Downloads, sun-jdmk-runtime-5.1-b34.2.zip/SUNWjdmk/5.1/lib/jdmkrt.jar
个人收集整理的学习java JMX的好东西,帮助初学者更好的理解JMX的作用和使用方式。个人认为包括的资料比较全了。
有关JMX学习的一些文档,对初学JMX的朋友有帮助.
NULL 博文链接:https://jasonhan-sh-hotmail-com.iteye.com/blog/1171904
jmx学习整理里1
很多jmx教程中提到的几个zip jmx-1_2_1-ri.zip jmx_remote-1_0_1_03-ri.zip jmx-1_1-mr-spec.zip
jmx_remote-1_0_1_03-ri.zip jmx-1_2_1-ri.zip 这两个包也是现在网上流行的例子所要求的两个包,即 1、jmx-1_2_1-bin 2、jmxremote-1_0_1-bin 例子网址:http://www.moon-soft.com/doc/39932.htm 其中jmx-1_2_1-ri....
JMX是指Java管理扩展,通过jmx可以监控java应用服务器的各项性能指标,jvm的性能指标等
JMX学习资料JMX学习资料
1.JMX与SPRING 结合实例 2.标准MBean 与非标准MBean 注册 3.基于接口和注解的MBean 注册 4.发布通知,处理通知及配置
NULL 博文链接:https://hu-bj.iteye.com/blog/382579
jmx-1_2_1-ri.zip jmx源码
JMX深入学习
java
jmx所需的jar包 jmxtools.jar、jmxri.jar 还有api jmx-1_2-api.zip
为什么JMX那么受欢迎,JMX到底有那些优势只得人们去学习和理解,本文从JMX的基本架构、hellowold jmx以及spring对JMX的支持讲起,希望大家能通过本文对JMX有个基础的认识,并能通过本文为今后学习JMX打个基础