这些天在看《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演示
package com.ling; public interface CarMBean {
String getColor();
void setColor(String color);
void drive(); }
package com.ling; public class Car implements CarMBean { private String color = "red";
@Override
public String getColor() {
// TODO Auto-generated method stub
return color;
} @Override
public void setColor(String color) {
// TODO Auto-generated method stub
this.color = color;
} @Override
public void drive() {
// TODO Auto-generated method stub
System.out.println("baby drive my car");
} }
package com.ling; public class StandarAgent {
private MBeanServer mBeanServer = null;
public StandarAgent( ){
this.mBeanServer = MBeanServerFactory.createMBeanServer();
} public MBeanServer getmBeanServer() {
return mBeanServer;
}
public void setmBeanServer(MBeanServer mBeanServer) {
this.mBeanServer = mBeanServer;
} public ObjectName createObjectName(String name){
ObjectName objectName = null;
try {
objectName = new ObjectName(name);
} catch (MalformedObjectNameException e) { e.printStackTrace();
} catch (NullPointerException e) { e.printStackTrace();
}
return objectName;
} private void createStandarBean(ObjectName objectName,String managedClassName){
try {
mBeanServer.createMBean(managedClassName, objectName);
} catch (Exception e) { e.printStackTrace();
}
} public static void main(String [] args){
StandarAgent agent = new StandarAgent();
MBeanServer mBeanServer = agent.getmBeanServer();
String managedClassName = "com.ling.Car";
ObjectName objectName = agent.createObjectName("ling:type="+managedClassName);
System.out.println(objectName.getDomain());
agent.createStandarBean(objectName, managedClassName); try {
Attribute colorAttribute = new Attribute("Color", "red");
mBeanServer.setAttribute(objectName, colorAttribute);
System.out.println(mBeanServer.getAttribute(objectName, "color"));
mBeanServer.invoke(objectName, "drive", null, null); } catch (Exception e) {
e.printStackTrace();
}
} }