??????? JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等
/** *定义一个普通的接口 * * @author zhangwei_david * @version $Id: HiMBean.java, v 0.1 2015年1月24日 下午1:16:15 zhangwei_david Exp $ */ public interface HiMBean { /** *打招呼 */ public void sayHello(); /** * 加法计算器 * * @param x * @param y * @return */ public int add(int x, int y); /** * 获取名称 * * @return */ public String getName(); /** *获取缓存大小 * * @return */ public int getCacheSize(); /** *设置缓存大小 * * @param size */ public void setCacheSize(int size); } /** *简单实现类 * @author Lenovo * @version $Id: Hi.java, v 0.1 2014年9月26日 下午2:48:09 Lenovo Exp $ */ public class HiMbeanImpl implements HiMBean { private final String name = "Reginald"; private int cacheSize = DEFAULT_CACHE_SIZE; private static final int DEFAULT_CACHE_SIZE = 200; /** * @see com.cathy.demo.jmx.notifications.HiMBean#sayHello() */ public void sayHello() { System.out.println("Hello," + getName()); } /** * @see com.cathy.demo.jmx.notifications.HiMBean#add(int, int) */ public int add(int x, int y) { return x + y; } /** * @see com.cathy.demo.jmx.notifications.HiMBean#getName() */ public String getName() { return name; } /** * @see com.cathy.demo.jmx.notifications.HiMBean#getCacheSize() */ public int getCacheSize() { return cacheSize; } /** * @see com.cathy.demo.jmx.notifications.HiMBean#setCacheSize(int) */ public void setCacheSize(int size) { cacheSize = size; } }
?
使用 Model MBean 的过程也是下面几步:
/** * * * @author zhangwei_david * @version $Id: Main.java, v 0.1 2015年6月19日 下午1:10:03 zhangwei_david Exp $ */ public class Main { /** * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { //获取Mean的平台服务 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); // 对即将被注册的MBean 构造一个ObjectName ObjectName objectName = new ObjectName("com.cathy.demo.jmx:type=Hi"); // 创建一个Mbean RequiredModelMBean mbean = new RequiredModelMBean(); HiMbeanImpl hiMbean = new HiMbeanImpl(); mbean.setManagedResource(hiMbean, "objectReference"); ModelMBeanAttributeInfo name = new ModelMBeanAttributeInfo("name", "java.lang.String", "userName", true, true, false, new DescriptorSupport(new String[] { "name=name", "descriptorType=attribute", "getMethod=getName", "setMethod=setName" })); ModelMBeanOperationInfo sayHello = new ModelMBeanOperationInfo("say Hello", hiMbean .getClass().getMethod("sayHello")); // 创建一个ModelMBeanOperationInfo ModelMBeanOperationInfo getName = new ModelMBeanOperationInfo("get userName", hiMbean .getClass().getMethod("getName")); // 使用ModelMbeanAttributeInfo和ModelMbeanOperationInfo构建一个ModelMBeanInfo对象 ModelMBeanInfo mbeanInfo = new ModelMBeanInfoSupport("HiMbean", "Test", new ModelMBeanAttributeInfo[] { name }, null, new ModelMBeanOperationInfo[] { sayHello, getName }, null); // 向ModelMBean 设置ModelMBeanInfo mbean.setModelMBeanInfo(mbeanInfo); // 将Mbean 注册到MBeanServer mbs.registerMBean(mbean, objectName); // 一直等待 System.out.println("Waiting forever..."); Thread.sleep(Long.MAX_VALUE); } }
?
运行后的可以通过jconsole看到MBean
?
原文:http://zhangwei-david.iteye.com/blog/2220828