在网上看到JMX可以监控JBOSS,TOMCat,WebLogic等服务器主机的各种信息,所以学习一下JMX的。
采用模型MBean开发JMX。
首先开发对应相关的JMX模型bean类对象
package com.easyway.apache.moduler.jmx; /** * 备注此处的JMX没有实现相关的XxxMBean的接口 * @author longgangbai * */ public interface IEasywayService { public abstract void printHello(); public abstract void printHello(String whoName); }
package com.easyway.apache.moduler.jmx; /** * 备注此处的JMX没有实现相关的XxxMBean的接口 * @author longgangbai * */ public class EasywayService implements IEasywayService { private String serviceName; public String getServiceName() { return serviceName; } public void setServiceName(String serviceName) { this.serviceName = serviceName; } /* (non-Javadoc) * @see com.easyway.apache.moduler.jmx.IEasywayService#printHello() */ public void printHello() { System.out.println("Hello World, " + serviceName); } /* (non-Javadoc) * @see com.easyway.apache.moduler.jmx.IEasywayService#printHello(java.lang.String) */ public void printHello(String whoName) { System.out.println("Hello , " + serviceName); } }
创建构建模型MBean对象
package com.easyway.apache.moduler.jmx; import javax.management.MBeanOperationInfo; import javax.management.MBeanParameterInfo; import javax.management.modelmbean.ModelMBeanAttributeInfo; import javax.management.modelmbean.ModelMBeanInfo; import javax.management.modelmbean.ModelMBeanInfoSupport; import javax.management.modelmbean.ModelMBeanOperationInfo; import javax.management.modelmbean.RequiredModelMBean; /** * 创建ModelBean的各种信息 * @author longgangbai * * */ public class ModelMBeanUtils { private static final boolean READABLE = true; private static final boolean WRITABLE = true; private static final boolean BOOLEAN = true; private static final String STRING_CLASS = "java.lang.String"; /** * * @return */ public static RequiredModelMBean createModlerMBean() { RequiredModelMBean model = null; try { model = new RequiredModelMBean(); //注入相关的服务类 model.setManagedResource(new EasywayService(), "ObjectReference"); ModelMBeanInfo info = createModelMBeanInfo(); model.setModelMBeanInfo(info); } catch (Exception e) { e.printStackTrace(); } return model; } /** * 创建ModelBean的过程 * @return */ private static ModelMBeanInfo createModelMBeanInfo() { ////////////////////////////////////////////////////////////////// // 属性 // ////////////////////////////////////////////////////////////////// // 构造name属性信息 ModelMBeanAttributeInfo nameAttrInfo = new ModelMBeanAttributeInfo(// "Name", // 属性名 STRING_CLASS, //属性类型 "people name", // 描述文字 READABLE, WRITABLE, !BOOLEAN, // 读写 null // 属性描述子 ); ////////////////////////////////////////////////////////////////// // 方法 // ////////////////////////////////////////////////////////////////// //构造 printHello()操作的信息 ModelMBeanOperationInfo print1Info = new ModelMBeanOperationInfo(// "printHello", // null, // null, // "void", // MBeanOperationInfo.INFO, // null // ); // 构造printHello(String whoName)操作信息 ModelMBeanOperationInfo print2Info; MBeanParameterInfo[] param2 = new MBeanParameterInfo[1]; param2[0] = new MBeanParameterInfo("whoName", STRING_CLASS, "say hello to who"); print2Info = new ModelMBeanOperationInfo(// "printHello", // null,// param2,// "void", // MBeanOperationInfo.INFO, // null// ); ////////////////////////////////////////////////////////////////// // 最后总合 // ////////////////////////////////////////////////////////////////// // create ModelMBeanInfo ModelMBeanInfo mbeanInfo = new ModelMBeanInfoSupport(// RequiredModelMBean.class.getName(), // MBean类 null, // 描述文字 new ModelMBeanAttributeInfo[] { // 所有的属性信息(数组) nameAttrInfo },//只有一个属性 null, // 所有的构造函数信息 new ModelMBeanOperationInfo[] { // 所有的操作信息(数组) print1Info, print2Info },// null, // 所有的通知信息(本例无) null//MBean描述子 ); return mbeanInfo; } }
创建JMX中模型MBean的Agent代理对象
package com.easyway.apache.moduler.jmx; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.ObjectName; import javax.management.modelmbean.RequiredModelMBean; import com.sun.jdmk.comm.HtmlAdaptorServer; /** * JMX代理测试ModelBean的应用 * @author longgangbai * * 备注: * 模型Mbean(Model MBean):动态可以配置 * 动态bean * 标准MBean(standard mbean): * */ public class EasywayServiceModelBeanAgent { public static void main(String[] args) throws Exception { MBeanServer server = MBeanServerFactory.createMBeanServer(); ObjectName helloName = new ObjectName("easyway:name=HelloWorld"); //获取测试bean的信息 RequiredModelMBean hello = ModelMBeanUtils.createModlerMBean(); //注册MBean对象 server.registerMBean(hello, helloName); //获取对象的 ObjectName adapterName = new ObjectName("EasywayServiceModelBeanAgent:name=htmladapter,port=8082"); HtmlAdaptorServer adapter = new HtmlAdaptorServer(); //注册 server.registerMBean(adapter, adapterName); adapter.start(); System.out.println("start....."); } }