JMX : MXBean
来源:互联网 发布:java yield 编辑:程序博客网 时间:2024/06/06 00:27
MXBean是一种MBean。
只会引用有限的几种数据类型,predefined set of data types。
如此,任何client都可以访问MXBean,包括远程client。client无需能访问到MXBean的attribute 的class。
命名规范:
接口 : XXXMXBean。或者用@MXBean注释,也可任意指定。
实现类 : 任意。
MXBean中的attribute可以是任意类的对象ClassA,而client无需ClassA的classpath也可以访问此MXBean的attribute。
ClassA的对象会被映射为Open Types。
javax.management.openmbean.CompositeData
Open Types :
javax.mamagement.openmbean.*
示例:
package test.xue.mxbean.model;import java.beans.ConstructorProperties;import java.util.Date;public class QueueSample {private final Date date;private final int size;private final String head;/** * MXBean framework calls getters to convert this into a javax.management.openmbean.CompositeData * ConstructorProperties reconstruct this from a COmpositeData */@ConstructorProperties({ "date", "size", "head" })public QueueSample(Date date, int size, String head) {this.date = date;this.size = size;this.head = head;}public Date getDate() {return date;}public int getSize() {return size;}public String getHead() {return head;}}
Remote Management Application的classpath中不会有QueueSample,因此MXBean framework会将QueueSample转换为CompositeData。
MXBean示例:
package test.xue.mxbean;import test.xue.mxbean.model.QueueSample;public interface QueueSamplerMXBean {public QueueSample getQueueSample(); // attributepublic void clearQueue(); // operation}
package test.xue.mxbean;import java.util.Date;import java.util.Queue;import test.xue.mxbean.model.QueueSample;public class QueueSampler implements QueueSamplerMXBean {private Queue<String> queue;public QueueSampler(Queue<String> queue) {this.queue = queue;}@Overridepublic QueueSample getQueueSample() {synchronized (queue) {return new QueueSample(new Date(), queue.size(), queue.peek());}}@Overridepublic void clearQueue() {synchronized (queue) {queue.clear();}}}
JMX agent:
package test.xue.mxbean;import java.lang.management.ManagementFactory;import java.util.Queue;import java.util.concurrent.ArrayBlockingQueue;import javax.management.InstanceAlreadyExistsException;import javax.management.MBeanRegistrationException;import javax.management.MBeanServer;import javax.management.MalformedObjectNameException;import javax.management.NotCompliantMBeanException;import javax.management.ObjectName;public class QueueSampleAgent {public static void main(String[] args) throws MalformedObjectNameException,NullPointerException, InstanceAlreadyExistsException,MBeanRegistrationException, NotCompliantMBeanException,InterruptedException {MBeanServer server = ManagementFactory.getPlatformMBeanServer();ObjectName name = new ObjectName("test.xue.mxbean:type=QueueSample");Queue<String> queue = new ArrayBlockingQueue<String>(10);queue.add("Element-1");queue.add("Element-2");queue.add("Element-3");QueueSampler mxbean = new QueueSampler(queue);server.registerMBean(mxbean, name);System.out.println("waiting here for remote management...");Thread.sleep(Long.MAX_VALUE);}}
使用JConsole测试:
可以看到,attribute QueueSample的类型转换为了CompositeData。
区别:
MXBean的代码看起来和Standard MBean没什么区别,唯一的无别在于Bean的名字后缀是MXBean,而不是MBean。
但是,如果把QueueSamplerMXBean变为QueueSamplerMBean,那么就由MXBean变为了Standard MBean。
此时,JConsole测试结果为 :
可以看到,此时attribute QueueSample的值已经变为了“不可见”,因为JConsole的classpath中没有QueueSample。
- JMX : MXBean
- JMX 平台MXBean
- JMX 平台MXBean
- JMX学习笔记(三)-MXBean
- JMX学习笔记(三):MXBean
- JMX学习笔记(三)-MXBean
- mxbean
- JMX
- JMX
- JMX
- JMX
- jmx
- JMX
- JMX
- jmx
- jmx
- JMX
- JMX
- poj1001
- linux之dd命令
- 空间分析之多元分析
- 黑马程序员--对于C#中几种循环的简单总结
- 坑爹的VS2008内存泄露报告
- JMX : MXBean
- Why always override hashcode() if overriding equals()?
- 投资策略
- eclipse中的.project 和 .classpath文件的具体作用
- Apache+Tomcat负载均衡两种session共享方式的设置之一粘性会话
- JAVA开发环境和语法基础
- hdu1068
- 安装android开发环境,并运行apk软件
- ZOJ 1760 Doubles