JMX简介

管 根据百度百科的定义,JMX是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等

JMX体系结构分为以下四个层次:设备层,代理层,分布服务层和附加管理协议API,目前从JDK1.5开始只提供了前2种实现
设备层又叫构件层,具体来说就是MBean,MBean是什么?就是对外暴露,需要被管理的JavaBean.
MBean又分标准MBean,动态MBean,开放MBean,以及模型MBean,其中动态MBean和开放MBean用的比较少,我们重点介绍标准MBean和模型MBean。

标准MBean,只要遵循MBean的规范的JavaBean就是标准MBean,具体是什么规范呢,就是首先定义一个以MBean结尾的XXXMBean接口,此接口内的所有方法都将可以被调用访问,然后定义类XXX实现XXXMBean接口,例子如下:

Count是需要被管理的类 

包含在MBean中方法都将是可以被管理的,MBean起名是有规范的,就是原类名后加上MBean字样

jmxtools.jar的下载地址为下载,运行 Main之前需要先启动rmiregister,命令行输入:rmiregistry 8888

另外需要添加JVM启动参数

-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=8880

第一个参数代表是否支持远程链接,第二个参数代表是否使用用户密码验证,如果为true,需要另外2个参数

-Dcom.sun.management.jmxremote.password.file=/home/wdw/jmx/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=/home/wdw/jmx/jmxremote.access

其中jmxremote.password文件内容可以为

monitorRole <Your password>
controlRole <Your password>

jmxremote.access内容为

monitorRole readOnly
controlRole readWrite

ssl的参数是否启用ssl加密支持
然后可以启动jconsole,如果本地启动,可以看到本地进程,如果是远程连接,则可以输入地址URL:service:jmx:rmi:///jndi/rmi://localhost:8888/server
来启动远程管理,然后在JMX管理里可以看到。如果使用http管理,可以直接在浏览器里输入http://localhost:8080就可以了

动态MBean:运行时动态添加管理方法,我们上面的例子里,stop方法执行之后,就会发现count不能再累加了,我们希望stop执行之后,可以手动执行+1的操作,例子如下:

不做过多解释了,看代码应该能看得懂,动态MBean的代码稍微复杂点,但它可以动态组装MBean信息,所以有时候可以动态做一些事情。

模型MBean:经过上面几次折腾之后,你会发现一个问题,被管理的Bean需要实现一个接口,但是,有时候被管理的Bean我们可能无法拿到源代码,对它进行修改的,这时候,我们就需要使用模型MBean了。例子如下

 

Count不需要实现任何接口,比如不能修改源码的Service,我们增加一个Util类来组装RequiredModelMBean

具体代码和动态MBean差不多,不再细述,最后使用方式和之前差不多

 配置的MBean:模型MBean可以动态管理一个已有的JavaBean,但是写起来还是很麻烦,可以不可以采用配置的方式呢?答案是肯定的,配置的方式有2种,一个是采用apache的commons-modeler,另一个是结合Spring,与Spring集成

先来看commons-modeler怎么做

虽然不需要实现接口,但是JavaBean规范还是需要的,比如get set方法

我们使用 XML来描述信息:mbeans.xml

放在和Count同一个包路径下就行

这是基本的Modeler的使用了。

Spring集成:关于和Spring的集成,我只把spring的配置文件写下,由于容器启动需要配合,就不再执行了

结合Spring的配置,很简单是吧?感兴趣的同学可以在应用里自己试试

另外关于JMX知识的最后一点是Notification机制,简单来说,就是一个MBean属性或者方法被调用之后会通知关心这个事件的监听者,来达到消息通知的目的,具体细节,就先不写了,等后续有时间再补充吧。

发表评论

电子邮件地址不会被公开。 必填项已用*标注


× 四 = 28

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">