这些天在看《How Tomcat Works》这本书。里面讲到了JMX的内容。对我来说是个新知识点。
JMX--Java Management Extensions,即Java管理扩展,是一个为应用程序、设备、系统等植入管理功能的框架。
JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应
用。可以非常容易的管理应用程序。许多基于服务器的应用程序(Tomcat, JBoss)都使用了JMX技术来管理各自的资源。
■ Instrumentation level(设备层)---定义了编写可由JMX管理的资源的标准,也就是如果编写MBean。
■ Agent level(代理层)---定义了创建代理的规范。代理封装了MBean服务器,提供了处理MBean的服务。API提供了创建默认MBean服务器的方法。
■ Distributed services level(分布式服务层)
■ Additional management protocol APIs(附加管理协议API)
2.MBean类型
其灵活性由低到高:标准类型,动态类型,开放类型,模型类型。
3.重要的类(在javax.management包及子包下)
MBean服务器是MBeanServer接口的实例。可通过 MBeanServerFactory.createMBeanServer()创建。
要将一个MBean注册到MBeanServer中,可以调用MBeanServer.registerMBean(Object o,ObjectName on)方法。
ObjectName唯一标识MBean。ObjectName由域和键值对组成。如 domain: key1 = value1 , key2 = value2
4.标准类型MBean演示
1 package com.ling; 2 3 public interface CarMBean { 4 String getColor(); 5 void setColor(String color); 6 void drive(); 7 8 }
1 package com.ling; 2 3 public class Car implements CarMBean { 4 5 private String color = "red"; 6 @Override 7 public String getColor() { 8 // TODO Auto-generated method stub 9 return color; 10 } 11 12 @Override 13 public void setColor(String color) { 14 // TODO Auto-generated method stub 15 this.color = color; 16 } 17 18 @Override 19 public void drive() { 20 // TODO Auto-generated method stub 21 System.out.println("baby drive my car"); 22 } 23 24 }
1 package com.ling; 2 3 4 public class StandarAgent { 5 private MBeanServer mBeanServer = null; 6 public StandarAgent( ){ 7 this.mBeanServer = MBeanServerFactory.createMBeanServer(); 8 } 9 10 public MBeanServer getmBeanServer() { 11 return mBeanServer; 12 } 13 public void setmBeanServer(MBeanServer mBeanServer) { 14 this.mBeanServer = mBeanServer; 15 } 16 17 public ObjectName createObjectName(String name){ 18 ObjectName objectName = null; 19 try { 20 objectName = new ObjectName(name); 21 } catch (MalformedObjectNameException e) { 22 23 e.printStackTrace(); 24 } catch (NullPointerException e) { 25 26 e.printStackTrace(); 27 } 28 return objectName; 29 } 30 31 private void createStandarBean(ObjectName objectName,String managedClassName){ 32 try { 33 mBeanServer.createMBean(managedClassName, objectName); 34 } catch (Exception e) { 35 36 e.printStackTrace(); 37 } 38 } 39 40 public static void main(String [] args){ 41 StandarAgent agent = new StandarAgent(); 42 MBeanServer mBeanServer = agent.getmBeanServer(); 43 String managedClassName = "com.ling.Car"; 44 ObjectName objectName = agent.createObjectName("ling:type="+managedClassName); 45 System.out.println(objectName.getDomain()); 46 agent.createStandarBean(objectName, managedClassName); 47 48 try { 49 Attribute colorAttribute = new Attribute("Color", "red"); 50 mBeanServer.setAttribute(objectName, colorAttribute); 51 System.out.println(mBeanServer.getAttribute(objectName, "color")); 52 mBeanServer.invoke(objectName, "drive", null, null); 53 54 } catch (Exception e) { 55 e.printStackTrace(); 56 } 57 } 58 59 60 }