最近再看JMX,从jcp网站下载jmx_1.1规范文档看,文档始终强调JMX框架可以从应用程序外部植入管理框架,实现管理与应用分离,我对这一直报有很大的不理解.
我不理解有如下几个原因:
1 MBean作为实现外部原理的底层操作类,怎么可能做到与应用分离?因为你要想对一个应用系统进行管理,难免需要获得该应用资源,考虑如下方法和场景.
function List sellect(Connection conn){
doSomething...
}
假如上述代码是某个遗留系统中的,当我发现操作执行缓慢时,我期望能在外部植入管理框架来检测是不是这个方法出的问题,那么我需要在doSomething之前之后各算一次时间,这个Mbean做不了,也得不到时间差.我只能自己把时间算出来,还要存储到全局变量里让Mbean去取,那么所谓外部植入在哪体现?归根结底我还是要修改原有业务代码,不可能只关注Mbean就能实现管理.
经过这个例子,我再想,也许MBean根本不适用于对遗留系统的监测,MBean也许是需要在构建应用的前期,对程序设置需对"检测点",也就是把MBean作为项目一部分处理,那么能在后期对前期分析出的可能问题(已经植入检测点的地方)点作出监控...
2 MbeanServer在哪里启动,我看到Tomcat中MbeanServer是随着Tomcat代码一起运行的,也就是说MBeanServer是和被监控对象运行在一个JVM里,因为MBean需要应用系统的资源才能得到应用系统的数据,而server有需要得到MBean的引用才能注册,弄到后来MBeanServer同应用系统部署在一起才能使用,这个又怎么能体现"外部植入"呢,你构建应用的时候还是要考虑MBeanServer的启动和注册问题..
[该贴被admin于2009-03-11 13:40修改过]