分享
 
 
 

MBean

王朝百科·作者佚名  2010-06-18
窄屏简体版  字體: |||超大  

MBean(Managed Bean)描述一个可管理的资源.是一个java对象,遵循以下一些规则:

必须是公用的,非抽象的类

必须有至少一个公用的构造器

必须实现它自己的相应的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接口提供注册和注销过程监控的钩点.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有