一JMX技术
1.MBean的概念和名称
JMX中的MBean就是针对这些资源而设计的,MBean通过“属性”来显示资源的状态,通过“操作”来实现对资源的控制和管理。MBean并不一定直接去和资源的状态,只要通过这个MBean可以实现“属性”和“操作”就足够了。对于MBean的调用主要通过代理来实现,这里的代理是指软件系统中用于操纵 MBean的组件。
每个MBean需要一个名称,用javax.management.ObjectName这个类来实现,以便将MBean之间区分开。MBean的名称包括两个部分:域名和键表。域名是MBean所在域的名称,如book.java 指的就是book下的 java子域。键表由若干个键名和键值组成,例如service=invoker,type=http,指的是名为service和type两个键,它们的健值是invoker和http。健表的惟一性与键之间的排列顺序无关。域名和键表之间通过“:”连接共同组成MBean的名称,如 book.java:service=example。
2. MBean的类型
目前共有4种类型的MBean:标准MBean,动态MBean,开放MBean和模型MBean。MBean需要由代理来操纵。而代理是通过MBean服务器,即MBeanServer,来操纵每个MBean的。每个MBean都以来ObjectName注册到MBeanServer,代理再通过 MBeanServer来调用MBean的属性和方法,调用的过程是借助Java的反射功能来实现的。每个MBean将有关自己的属性和方法的描述信息封装在MBeanInfo中,并向MBeanServer提供获取MBeanInfo的方法,即实现getMBeanInfo()方法或者通过一个确定的接口直接暴露自己的方法和属性。如果采取第一种方法来实现,那么这个MBean主是一种动态MBean;如果采用后一种方法来实现,那么这个MBean就是一种标准MBean。
2.1标准MBean
下面介绍一个标准MBean的例子:HelloMBean是接口,Hello 是实现类,在JMX中,标准MBean的接口和实现类之间通过名称后缀-MBean来相互对应。
package com.joy_cz.jmx;
/**
* @author joy_cz
*/
public interface HelloMBean {
public void sayHello();
public int getTimes();
public void setTimes(int t);
}
标准MBean就是用这种接口的方式来静态的提供MBean的方法和属性,下面是标准HelloMBean的实现类。
package com.joy_cz.jmx;
/**
* @author joy_cz
*/
public class Hello implements HelloMBean {
private int times;
/* (非 Javadoc)
* @see com.joy_cz.jmx.HelloMBean#getTimes()
*/
public int getTimes() {
// TODO 自动生成方法存根
return times;
}
/* (非 Javadoc)
* @see com.joy_cz.jmx.HelloMBean#sayHello()
*/
public void sayHello() {
// TODO 自动生成方法存根
System.out.println("say hello to you ~");
times++;
}
/* (非 Javadoc)
* @see com.joy_cz.jmx.HelloMBean#setTimes(int)
*/
public void setTimes(int t) {
// TODO 自动生成方法存根
times = t;
}
}
调用这个MBean需要一个代理程序。在代理程序HelloAgent中,Hello的对象实例以“book.java:service=example”的名称被注册到了MBeanServer,而后通过相同的ObjectName名称借助MBeanServer调用了Hello的“sayHello”方法,获取并设置了“Times”属性的值。