什么是MBean?
Managed Bean (MBean)
描述一个可管理的资源.是一个java对象,遵循以下一些语义.java对象的属性(property)叫属性(attribute),方法
(method)叫操作(operations).
定义MBean
一个MBean的语义
必须是公用的,非抽象的类
必须有至少一个公用的构造器
必须实现它自己的相应的MBean接口或者实现
javax.management.DynamicMBean接口
可选的,一个MBean可以实现
javax.management.NotificationBroadcaster接口
MBean的类型
标准MBean
动态MBean
模型MBean
开放MBean
注册 MBean
一个MBeanServer的主要职责是在一个JMX代理中维护一个MBean的注册表.MBean能够以下面两个方法中的任意一个注册:
1) 创建一个MBean实例并注册它到MBeanServer用方法:
public ObjectInstance registerMBean(Object object, ObjectName name)
这里,object是创建的MBean实例,name部分是MBean的一个唯一标志符.
2) 使用createMBean 方法中的一个:
public ObjectInstance createMBean(String classname, ObjectName name)
public ObjectInstance createMBean(String classname, ObjectName name,
ObjectName loader) public ObjectInstance createMBean(String classname,
ObjectName name, Object[] params, String[] types) public ObjectInstance
createMBean(String classname, ObjectName name, ObjectName loader,
Object[] params, String[] types)
createMBean方法使用java自省来创建一个MBean实例.对所有的createMBean方法,有两个变量是通用的.
String classname -- 要创建的MBean的实例的类名.
ObjectName name --
MBean要注册的对象名称.
如果用两个变量的createMBean构造器,缺省的类装载器(class
loader)用来装载MBean类,MBean被使用缺省的构造器初始化.如果MBean已经被初始化,这个实例将被MBeanServer用第二个变
量的对象名称注册.如果你想使用指定的类装载器,那么可以使用三个变量的构造器.这个类装载器将被MBeanServer注册为一个MBean.这个类装
载器的对象名称将用做第三个变量.
当实例化一个类,如果任何参数必须传入,那么可以使用四个参数的createMBean方法.这个createMBean方法的最后的两个参数分别
包含对象数组(类的初始化必须的)和他们的署名.如果MBean类必须用其他指定的类装载器装载,那么应该使用五个参数的构造器.
注册一个MBean的多个实例
你可能需要监控十多个Web 服务器.如果所有的web服务器的管理信息是相同的,那么你不必编写十个MBean.
一个MBean足够了.我们能够创建多个实例并注册每一个实例以一个唯一的对象名称.
现在可以看到使用对象名称来避免混淆的重要性.
很明显服务器的端口数字和服务器的名称将是任意服务器的唯一,那是因为,在一个机器上,你不能运行两个服务器在一个端口上.
于是,可以创建对象名称如
Servers:hostName=localhost,portNumber=xxxx
假设超过一个服务器在同一个机器上启动,那么对象名称应该为
Servers:hostName=localhost,portNumber=yyyy
由于对象名称是注册MBean的唯一标志,多个MBean的实例将被注册为不同的对象名称.
对象名称通常用他们包含的关键值对来区分,如一个服务器MBean的主机名和端口名关键字及他们各自的值.同理,唯一标志相似的MBean组,对象
名称将用相应的关键字和值对拼装.例如,type=ServerMBean指出这个MBean是一个服务器MBean类型.由此,对象名称值
Server:type=ServerMBean,hostName=localhost,portNumber=8050
提供一个简单的MBean分组,产生为服务器MBean的实现.并且也提供了一个方法来唯一标志在localhost:8050上运行的服务器的
MBean实例.
一个简单的示范
让提供管理信息(所有web服务器通用的)的Mbean为动态MBean,并且起名为ServerInfo.
让两个web服务器运行在机器A(machineA)的端口8080和80.让一个web服务器运行在机器B(machineB)的8080端口,
另一个web服务器运行在机器C(machineC)的80端口.总之,我们需要管理这四个web服务器.我们能够用ServerInfo
类和创建四个实例来管理每一个web服务器.注册四个MBean的代码片断如下:
ServerInfo srvr1 = new ServerInfo(); ServerInfo srvr2 = new
ServerInfo(); ServerInfo srvr3 = new ServerInfo(); ServerInfo srvr4 =
new ServerInfo();
MBeanServer mbs = null;
try { mbs = MBeanServerFactory.createMBeanServer( );
mbs.registerMBean(srvr1, new
ObjectName("Server:hostName=machineA,portNumber=8080"));
mbs.registerMBean(srvr2, new
ObjectName("Server:hostName=machineA,portNumber=80"));
mbs.registerMBean(srvr3, new
ObjectName("Server:hostName=machineB,portNumber=8080"));
mbs.registerMBean(srvr4, new
ObjectName("Server:hostName=machineC,portNumber=80")); } catch
(Exception e) { e.printStackTrace(); }
注销MBean
MBean能够用MBeanServer 的下面方法注销:
public void unregisterMBean(ObjectName name) 这里name
是这个MBean实例注册的对象名称.
注销MBean后, MBeanServer将不再保存任何这个MBean实例的关联.
控制MBeanRegistration
JMX定义了一个接口叫MBeanRegistration.这个接口的目的是允许MBean开发者对在MBeanServer上注册和注销进行一
些控制.这通过MBean实现javax.management.MBeanRegistration接口来达到.
MBeanRegistration接口定义注册控制机制的行为.它定义了以下四个方法:
public ObjectName preRegister(MBeanServer mbs, ObjectName name)
public void postRegister() public void preDeRegister() public void
postDeRegister()
所有以上的方法都是回调方法,
MBeanServer将在恰当的时机调用这些方法.
如果一个MBean实现MBeanRegistration并且这个MBean被注册,MBeanServer在注册前调用
preRegister方法.这个方法返回的对象名称将在MBean注册过程中使用.在成功完成MBean注册后,MBeanServer调用
postRegister方法.
如果以上的MBean被注销,在注销前MBeanServer调用preDeRegister方法.如果注销成功,MBeanServer调用
postDeRegister方法.
需要记住的几点
对于一个单一MBean类,多个实例能够被创建,并能够被注册为注册时MBean提供的对象名称.
无论何时一个MBean被注
册,MBeanServer创建一个类型为 jmx.mbean.created 的消息. MBeanServerDelegate MBean
广播这个消息到所有注册的监听者.
MBeanRegistration接口提供注册和注销过程监控的钩点.
分享到:
相关推荐
### Java分布式应用学习笔记09JMX-MBean的介绍 #### MBean概念及作用 MBean,即Managed Bean,是在JMX(Java Management Extensions)框架中用于管理资源的一种特殊Java对象。通过MBean,可以方便地对应用程序进行...
2. **MBean Server**:这是JMX架构的核心,它负责注册和管理MBeans,处理MBean之间的交互,并提供给管理工具访问MBeans的接口。 3. **管理工具(Management Tools)**:这些工具可以是图形界面的,也可以是命令行的...
1. **创建MBean**: 首先,你需要创建一个实现了所需管理功能的Java类,然后通过`@ManagedBean`注解声明它为一个MBean。 2. **注册MBean**: 使用`MBeanServer`注册你的MBean。`MBeanServer`是JMX的核心组件,负责...
MBean(Managed Bean)是Java管理扩展(Java Management Extensions,JMX)框架的一部分,它提供了一种标准的方式来管理和监控Java应用程序。MBean是可管理对象的简单表示,它允许外部工具或管理系统通过JMX接口来...
**JMX(一)——MBean Server** Java Management Extensions (JMX) 是Java平台上的一个标准,用于管理和监控应用程序、设备和服务。它提供了一个灵活的框架,使得开发者能够轻松地创建可管理的组件,并通过标准接口...
NULL 博文链接:https://jasonhan-sh-hotmail-com.iteye.com/blog/1171904
Quartz jboss Mbean Config
本课程介绍JMXAPI的基本概念,它被称之为被管理的bean,或者MBean。MBean是一个被管理的Java对象,就像Javabean组件一样,但是它遵从JMX规范的设计模式。MBean可以表示设备、应用或者任何需要被管理的资源。MBeans...
mbean-annotation-api-4.5.2.jar
mbean-annotation-api-4.5.1.jar
mbean-annotation-api-4.5.0.jar
mbean-annotation-api-4.0.0.jar
mbean-annotation-api-4.5.2-sources.jar
mbean-annotation-api-4.5.1-sources.jar
mbean-annotation-api-4.5.0-sources.jar
mbean-annotation-api-4.0.0-sources.jar
**BeanBagger** 是一个专为Java开发人员设计的实用工具,它的主要功能是收集MBean(Managed Beans)的信息,并将其记录到日志中。在Java平台上,MBeans是Java管理扩展(Java Management Extensions,JMX)框架的一...
mbean-annotation-api-4.0.0-beta-2.jar
mbean-annotation-api-4.0.0-beta-1.jar