1、- 1 -JMX MBeanServerFactory.newMBeanServer();ManagementFactory.getPlatformMBeanServer();区别:createMBeanServer 所创建出的 MBeanServer 的引用内部保存(MBeanServer reference is internally kept) ,所以可以由 findMBeanServer 来获得该 MBeanServer 的引用。newMBeanServer 没有内部保存引用,若 MBeanServer 不再用了,GC 会回收掉。ObjectName构造方法:ObjectName(St
2、ring name): name 格式为“DomainName:key=value”.ObjectName(String domain,String key,String value)ObjectName(String domain,Hashtable table)注意:ObjectName 初始化时会抛出异常,需要进行捕获,或者在方法上抛出。Standard MBeanBrief Intro1. 需要有一个接口;2. 需要有一个实现该接口的类。注意:接口必须命名为实现类+MBean,如果接口名字不对,会报错,说没有按照 standard MBean convention 约定。- 6 -例子
3、public interface HelloMBeanpublic String getName();public void setName(String name);public void printHello();public void printHello(String whoName);实现类:package com.primeton.spl;public class Hello implements HelloMBeanprivate String name;public Hello()this.name = “This is default name from default co
4、nstructor .“;public Hello(String name)this.name = name + “: from constructor with a param“;public String getName()return name;public void setName(String name)this.name = name;public void printHello()System.out.println(“Hello World, “ + name);public void printHello(String whoName)System.out.println(“
5、Hello , “ + whoName);Comment Mike1: 实现类类名- 7 -JMX Agent 类:package com.primeton.spl;import javax.management.MBeanServer;import javax.management.MBeanServerFactory;import javax.management.ObjectName;import m.HtmlAdaptorServer;public class HelloAgentpublic static void main(String args) throws Exception
6、MBeanServer server = MBeanServerFactory.createMBeanServer();/ MBeanServer server = ManagementFactory.getPlatformMBeanServer();ObjectName helloName = new ObjectName(“Michael_Shi:name=HelloWorld“);server.registerMBean(new Hello(), helloName);ObjectName adapterName = new ObjectName(“HelloAgent:name=htm
7、ladapter“);HtmlAdaptorServer adapter = new HtmlAdaptorServer();adapter.setPort(9999);server.registerMBean(adapter, adapterName);adapter.start();System.out.println(“start.“);解析:HelloMBean是接口,且命名必须为 XXX + MBean,里面定义了各种业务方法。Hello类是接口的实现类,里面实现了业务方法。注意:MBean 的属性的读写性是在接口 HelloMBean中定义的,由 getter方法进行读,sette
8、r 方法进行写,可以根据具体属性的读写性进行删减。MBServer 对 MBean通过 register方法进行注册。HtmlAdaptorServer需要加入 jmxtools.jar。这里提供了用浏览器进行查看注册在 MBServer中的 MBean的方法。相当于浏览器是 client end。它也是一个 MBean,也需要在 MBServer中进行注册。Comment Mike2: 在 jmxtools.jar中- 8 -并且还需要调用 start方法。注意:当使用 htmpAdaptor时,如果需要设置 port,1.可以在 ObjectName中设置 ObjectName adapt
9、erName = new ObjectName(“HelloAgent:name=htmladapter,port=9999“);2.可以通过 adaptor.setPort(9999);设置。推荐后者。注意:可以对 htmladapter添加验证身份/ 添加验证功能AuthInfo login = new AuthInfo();login.setLogin(“admin“);login.setPassword(“admin“);adapter.addUserAuthenticationInfo(login);MBeanServer在注册 MBean后,可以通过 setAttribute对其属
10、性进行修改。可以应用于不能修改源代码的第三方 jar包。setAttribute(ObjectName name,Attribute attribute)运行后,打开浏览器,在地址栏输入 localhost: 9999 即可以看到注册的MBean.Dynamic MBeanBrief Intro继承 javax.management.DynamicMBean 的 Mbean就是 Dynamic Mbean注意:一个 MBean不能同时是 Dynamic和 Standard的,即不能同时继承两个接口(一个自己 MBean的接口,一个 DynamicMBean接口) 。继承该接口,就要实现下面各方
11、法:public Object getAttribute( String attribute )public void setAttribute( Attribute attribute )public AttributeList getAttributes( String attributes );public AttributeList setAttributes( AttributeList attributes );- 9 -public Object invoke( String actionName, Object params, String signature )public
12、MBeanInfo getMBeanInfo();通过 getAttribute 和 getAttributes 来获得属性,setAttribute 和 setAttributes来设置属性。Invoke 方法参数:String:要调用的方法名;Object:调用方法的参数值;String:方法的参数值类型。When Dynamic MBean?1. 当你不能改变代码却想要对其资源进行管理时(例如第三方 jar 包) ;2. 资源的受管接口经常变化时。Why Dynamic MBean?1. 更加简单地对现存代码进行 instrument;2. 可以对受管资源提供 description(i
13、s not avaiable for standard MBean)3. 你还可以在运行期间新创建一些受管资源(例如:新建方法、属性等) 。MBeanInfo:包含 MBean 元数据的容器。- 10 -MBeanInfo 类的实例能够通过调用 getClassName()和 getDescription()来获得MBean 的类名和描述。在 Dynamic MBean 中,最终要由将所有的其他 Info 创建成 MBeanInfo。MBeanFeatureInfo:是所有 MBean 元数据的超类,含有 name 和 description,所以其他的元数据类都有 name 和 descri
14、ption。MBeanParameterInfo:描述了构造函数和方法中的参数名、描述,还增加了参数的类型。这三个就足够定义方法的参数了。MBeanConstructorInfo:描述了 MBean 类的构造函数。可以通过 constructor 或者name、 description、MBeanParameterInfo 来进行构造(具体见 API) 。该类只有一个方法:getSignature(),返回 MBeanParameterInfo 。MBeanAttributeInfo:描述暴露出的属性信息。可以通过传入相关属性信息来构造,也可以通过传入 Method for getter &
15、setter 来进行构造(见 API) 。通过调用下列方法来获得信息:getType()获得属性类型;isReadable()是否可读,如果为 true,需要提供 getter 方法;isWritable()是否可写,如果为 true,需要提供 setter 方法;isIs()是否可以用 is 获得(boolean 类型) 。注意:在构造方法中,第一个参数为 name(The name of the attribute),如果你的属性是小写,例如 password,那么在这个构造方法中,你需要把其首字母大写,即为 Password。因为参数的读写时通过 getter 和 setter 方法进行访
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。