2.1.2.1 管理构件(MBean) 在JMX规范中,管理构件定义如下:它是一个能代表管理资源的Java对象,遵从一定的设计模式,还需实现该规范定义的特定的接口。该定义了保证了所有的管理构件以一种标准的方式来表示被管理资源。5 J) }, [& e# r4 f
管理接口就是被管理资源暴露出的一些信息,通过对这些信息的修改就能控制被管理资源。一个管理构件的管理接口包括:6 S. z( v# L: v( ^1 k' e' L* C$ x
1)能被接触的属性值;- c" X/ q* X, C" c
2)能够执行的操作;
& \! a N3 q/ E8 B 3)能发出的通知事件;
7 P# C& h; b- g( p# X 4)管理构件的构建器。7 V2 P6 b$ [: [
管理构件通过公共的方法以及遵从特定的设计模式封装了属性和操作,以便暴露给管理应用程序。例如,一个只读属性在管理构件中只有Get方法,既有Get又有Set方法表示是一个可读写的属性。
' z/ p3 c; r+ `, J# ?7 i1 g) W- J 其余的JMX的构件,例如JMX代理提供的各种服务,也是作为一个管理构件注册到代理中才能提供相应的服务。
0 n* j0 G$ A8 |6 } JMX对管理构件的存储位置没有任何限制,管理构件可以存储在运行JMX代理的Java虚拟机的类路径的任何位置,也可以从网络上的任何位置导入。6 W( }1 t1 F. m' ^
JMX定义了四种管理构件:标准、动态、开放和模型管理构件。每一种管理构件可以根据不同的环境需要进行制定。) ^5 l9 I9 J* b+ n
1.标准管理构件! e* Z! J. D$ ~ x8 ^; I/ J- m5 [! h* f
标准管理构件的设计和实现是最简单的,它们的管理接口通过方法名来描述。标准管理构件的实现依靠一组命名规则,称之为设计模式。这些命名规则定义了属性和操作。检查标准管理构件接口和应用设计模式的过程被称为内省(Introspection)[22]。JMX代理通过内省来查看每一个注册在MBean 服务器上的管理构件的方法和超类,看它是否遵从一定设计模式,决定它是否代表了一个管理构件,并辨认出它的属性和操作。- V* s1 Q7 o! @
2.动态管理构件
( P' h1 Q7 {. u$ C 动态管理构件提供了更大的灵活性,它可以在运行期暴露自己的管理接口。它的实现是通过实现一个特定的接口DynamicMBean(如下图)。# S! c. X4 [' x8 A
JMX代理通过getMBeanInfo方法来获取该动态管理构件暴露的管理接口,该方法返回的对象是MbeanInfo类的实例,包含了属性和操作的签名。由于该方法的调用是发生在动态管理构件向MBean服务器注册以后,因此管理接口是在运行期获取的。不同于标准管理构件,JMX代理不需要通过内省机制来确定动态管理构件的管理接口。由于DynamicMBean的接口是不变的,因此可以屏蔽实现细节。由于这种在运行期获取管理接口的特性,动态管理构件提供了更大的灵活性。/ n0 F& k) ]8 K3 U" V0 ]9 D& f% C# I
3.开放管理构件
! ]9 T7 e8 B4 i3 z+ m9 ~. Z7 d% m 开放管理构件是一种专门化的动态管理构件,其中所有的与该管理构件相关的参数、返回类型和属性都围绕一组预定义的数据类型(String、Integer、Float 等)来建立,并且通过一组特定的接口来进行自我描述。JMX代理通过获得一个OpenMBeanInfo对象来获取开放管理构件的管理接口,OpenMBeanInfo是MbeanInfo的子类。
) c6 B: h6 }+ J5 L1 y 4.模型管理构件6 c" k4 s4 F' n7 }# E
模型管理构件也是一种专门化的动态管理构件。它是预制的、通用的和动态的 MBean 类,已经包含了所有必要缺省行为的实现,并允许在运行时添加或覆盖需要定制的那些实现。JMX规范规定该类必须实现为javax.management.modelmbean.RequiredModelMBean,管理者要做的就是实例化该类,并配置该构件的默认行为并注册到JMX代理中,即可实现对资源的管理。JMX代理通过获得一个ModelMBeanInfo对象来获取管理接口。. V8 W% |7 p: r% A( B, u( v" U! S
模型管理构件具有以下新的特点[23]:% m) m8 D6 l$ P4 {" s( ]& A: e$ o
1)持久性- M' |) A0 t# _' W
定义了持久机制,可以利用Java的序列化或JDBC来存储模型MBean的状态。/ u+ O. l* @# \0 _, i. F. B
2)通知和日志功能
* n. k- i/ ~5 m$ J: F 能记录每一个发出的通知,并能自动发出属性变化通知。
9 ]3 q6 a: X o# l( P 3)属性值缓存6 F/ V6 R" {! a4 x9 g
具有缓存属性值的能力。 |