Java Management extentsions(jmx)与tomcat

1,概念:一个可以使用JMX管理器来管理的Java对象称为JMX管理资源(JMX manageable resource)。事实上,一个JMX管理资源也可以是一个应用程序、一个实现或者一个服务、设备、用户等等。JMX管理资源用Java写或者提供一个Java包装。
要想让一个Java对象称为JMX管理资源,必须创建另一个名为Managed Bean或者MBean的对象。org.apache.catalina.mbeans包包括一些MBeans。ConnectorMBean, StandardEngineMBean, StandardHostMBean, StandardContextMBean是Managed Bean的例子。从他们的名字你可以猜到ConnectMBean用于管理连接器,StandardContextMBean用于管理org.apache.catalina.core.StandardContext对象等等。当然,你也可以编写MBean管理多个Java对象。 MBean将Java对象的属性和方法暴露给管理应用程序(management application)。管理应用程序本身不能直接访问Java对象。因此可以选择任意的属性和方法让管理应用程序访问。

一共有四种MBean:标准standard,动态dynamic, 打开open, 和模型model,从结构上来看,JMX规范分为3层,设备层(instrumentation level),代理层(agent level),和分布服务层(distributed services level)。MBean服务器处于代理层,而MBeans处于设备层。分布服务层将会在JMX规范的未来版本涉及到。

2.标准MBean是最简单的MBean。要是用标准MBean管理一个Java对象,需要以下工作:
· 创建一个接口,名为你的类名加上后缀MBean。例如,如果要管理的Java类是Car,接口名酒味CarMBean。

· 修改Java类,让它实现你创建的接口。

· 创建一个代理,该代理必须包括一个MBean服务器。

· 为你的MBean创建一个ObjectName。

· 初始化MBean服务器。

· 向MBean服务器注册MBean。

package ex20.pyrmont.standardmbeantest;
 public class Car { 
private String color = "red"; 
public String getColor() {
 return color; 
} 
public void setColor(String color) {
this.color = color; 
} 
public void drive() {
 System.out.println("Baby you can drive my car.");
 } 
}
//1: The modified Car class 
package ex20.pyrmont.standardmbeantest; public class Car implements CarMBean { private String color = "red"; public String getColor() { return color; } public void setColor(String color) { this.color = color; }

public void drive() { System.out.println("Baby you can drive my car."); } }
//2: The CarMBean interface 
package ex20.pyrmont.standardmbeantest; 
public interface CarMBean { 
public String getColor(); 
public void setColor(String color);
public void drive(); 
}
//3: The StandardAgent class 
package ex20.pyrmont.standardmbeantest; 
import javax.management.Attribute;
import javax.management.ObjectName; 
import javax.management.MBeanServer; 
import javax.management.MBeanServerFactory; 
public class StandardAgent {
 private MBeanServer mBeanServer = null; 
public StandardAgent() { 
mBeanServer = MBeanServerFactory.createMBeanServer(); 
} 

public MBeanServer getMBeanServer() { 
return mBeanServer; 
} 

public ObjectName createObjectName(String name) { 
ObjectName objectName = null; 
try { objectName = new ObjectName(name);
 } catch (Exception e) {
} 
return objectName; 
}

 private void createStandardBean(ObjectName objectName, String managedResourceClassName) {
 try { 
mBeanServer.createMBean(managedResourceClassName, objectName);
 } catch(Exception e) { 
}
 } 

public static void main(String[] args) {
 StandardAgent agent = new StandardAgent();
MBeanServer mBeanServer = agent.getMBeanServer();
 String domain = mBeanServer.getDefaultDomain();
 String managedResourceClassName = "ex20.pyrmont.standardmbeantest.Car"; 
ObjectName objectName = agent.createObjectName(domain + ":type=" + managedResourceClassName); 
agent.createStandardBean(objectName, managedResourceClassName);
 // manage MBean
 try {
 Attribute colorAttribute = new Attribute("Color","blue"); mBeanServer.setAttribute(objectName, colorAttribute); 
System.out.println(mBeanServer.getAttribute(objectName, "Color")); mBeanServer.invoke(objectName,"drive",null,null); } catch (Exception e) { e.printStackTrace(); } } }

如果运行StandardAgent类,会得到以下输出。

blue

Baby you can drive my car.

 

 

 

 

 

你可能感兴趣的:(tomcat)