问banq以及各位老师关于JMX和所谓"外部植入"的问题

最近再看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修改过]

我现在开始不相信什么"外部植入","非侵入"这样的说法了,也或者我对这些概念理解狭隘.

如果所有的系统都首先是基于JMX 就可以
如果不是,那么你要先植入JMX,这就是侵入性的真相。

某个设计标榜无侵入性,前提是,你首先要把它侵入你的系统。

"某个设计标榜无侵入性,前提是,你首先要把它侵入你的系统"

这话让人豁然开朗,非侵入性大概是要在设计前期做足了侵入式设计,之后,后续的功能添加是非侵入的,而一个完全无关的系统,非侵入的植入某些东西时不可能的。

一旦涉及到业务过程的描述其实就已经开始描述侵入性了,无论是接口的继承或者如init()和start()等命名规则甚至是Java的注释。完全没有侵入性的公用框架我还没有见过,呵呵,也许是见识短了。

我觉得所谓的“非侵入”,全部都是有前提条件的,如果一个系统好好的呆在那里,你想给他增加点什么而不对已有代码进行修改是不可能。。。如果要想做到“零修改”,那必须在设计这个系统前期就预料到这里会发生增加,而预留出灵活点,如果这样这就又不是一个遗留系统了。。。又绕回去了。。。