`
阅读更多
JMX应该说是关于网络应用管理的的框架,如果你开发了一个比较复杂的系统,无疑你要提供这个系统的自身管理 系统,JMX更多应用是体现在Server上,如果你要使用java开发一个自己Server或复杂的应用系统,那么推荐你基于JMX架构来开发, JBoss 3.0 weblogic等就是基于JMX开发的符合J2EE规范的服务器软件。

了解JMX可以使你深入了解J2EE服务器, 为什么我们平时说 "EJB"是个比较"Weight"的方案选择,其中一个原因是J2EE服务器软件本身 也是你的系统中一部分,它作为你系统的容器,对你的系统有至关重要的作用,如果无法直接介入 管理或“调教”它,那么无疑你的系统本身存在着隐含的危险, 现在,通过JMX,你现在可以深入到你J2EE容器内部的管理了。 (好像国内出现了第一个自己J2ee服务器,不知道那是不是基于JMX开发的?)

J2EE并不能概括所有的应用领域,比如对速度和性能要求极高的游戏或股票行情等系统就需要自己直接来开发Server, 如果是能够基于JMX开发,那么可以说就大大提高编写管理程序的效率,可以将你的模块变成JMX的MBean,可以通过Agent在程序内部或者通过 WEB管理页面对你的MBean模块进行初始化 重启 以及参数设置。

JMX的好处还有:可以方便整合连接现有的Java技术,如JNDI JDBC JTS及其它。特别是能够使用Jini的查询 发现机制以及协议,我们知道,Jini提供了一种服务的查询和发现机制,这些services都可以通过JMX 来实现管理。

jmx术语:
MBean:是Managed Bean的简称。在JMX中MBean代表一个被管理的资源实例,通过MBean中暴露的方法和属性,外界可以获取被管理的资源的状态和操纵MBean的行为。事实上,MBean就是一个Java Object,同JavaBean模型一样,外界使用自醒和反射来获取Object的值和调用Object的方法,只是MBean更为复杂和高级一些。

MBeanServer:MBean生存在一个MBeanServer中。MBeanServer管理这些MBean,并且代理外界对它们的访问。并且MBeanServer提供了一种注册机制,是的外界可以通过名字来得到相应的MBean实例。

JMX Agent:Agent只是一个Java进程,它包括这个MBeanServer和一系列附加的MbeanService。当然这些Service也是通过MBean的形式来发布。

Protocol Adapters and Connectors
JMX Agent通过各种各样的Adapter和Connector来与外界(JVM之外)进行通信。同样外界(JVM之外)也必须通过某个Adapter和Connector来向JMX Agent发送管理或控制请求。
Adapter和Connector的区别在于:Adapter是使用某种Internet协议来与JMX Agent获得联系,Agent端会有一个对象(Adapter)来处理有关协议的细节。比如SNMP Adapter和HTTP Adapter。而Connector则是使用类似RPC的方式来访问Agent,在Agent端和客户端都必须有这样一个对象来处理相应的请求与应答。比如RMI Connector。
JMX Agent可以带有任意多个Adapter,因此可以使用多种不同的方式访问Agent。

jmx中的三层结构:
Instrumentation 层
Instrumentation层主要包括了一系列的接口定义和描述如何开发MBean的规范。通常JMX所管理的资源有一个或多个MBean组成,因此这个资源可以是任何由Java语言开发的组件,或是一个JavaWrapper包装的其他语言开发的资源。

Agent 层
Agent用来管理相应的资源,并且为远端用户提供访问的接口。Agent层构建在Intrumentation层之上,并且使用并管理Instrumentation层内部描述的组件。通常Agent由一个MBeanServer和多个系统服务组成。另外Agent还提供一个或多个Adapter或Connector以供外界的访问。
JMX Agent并不关心它所管理的资源是什么。

Distributed 层
Distributed层关心Agent如何被远端用户访问的细节。它定义了一系列用来访问Agent的接口和组件,包括Adapter和Connector的描述。

JMX在技术上的需求可以说是将管理功能从功能性接口中分离出来。
例如一个缓存接口
interface ICache{
Object get(Object key);
void put(Object key, Object value);
}
但一个具体实现类可能有很多参数可以调整,如缓存的最大尺寸等。这些可配置参数一般与具体实现紧密相关,即与实例相关,而不直接涉及到所要实现的功能。例如实现类可以具有setMaxSize()和getMaxSize()方法。
如果这些配置方法在功能接口中定义,就会造成功能接口的臃肿和不必要的与实现方法之间的依赖。如果直接调用实现类的方法,只能使用reflection, 但是java class作为元数据所承载的信息量有限,需要外部定义一个规范来补充信息。JMX就是这样的一种规范。

JMX 的核心是 MBServer。Java SE 已经提供了一个默认实现,可以通过 MBServerFactory.createMBeanServer() 获得。每个资源监控者(MBean)一般都会有名称(ObjectName), 登记在 MBServer 内部的一个 Repository 中。注意,这个 ObjectName 对于每一个 MBServer 必须是唯一的,只能对应于一个 MBean。

但是对于很多已有的 SubAgent 实现,其 Coding Convention 并不符合标准 MBean 的要求。重构所有这些 SubAgent 以符合标准 MBean 标准既费力也不实际。JMX 中给出了动态(Dynamic) MBean 的概念,MBServer 不再依据 Coding Convention 而是直接查询动态 MBean 给出的元数据(meta data)以获得 MBean 的对外接口。

为了取得被管理资源的信息, 需要实用MBean对被管理的资源信息进行封装, 然后MBean会作为一种被管理资源的代理来访问被管理的资源的相关信息, 例如被管理者是一个Server, 要对这个Server进行监控, 那么我们可以创建一个ServerMonitor的MBean, 在这个MBean中会有一个对这个Server的引用, 然后在里面调用Server的相应的方法来取得所需要的信息。这样我们就将调用Server的过程改为调用MBean了。

对于管理系统来说,这些在 MBean 中公开的方法,最终会被 JMX 转化成属性(Attribute)、监听(Listener)和调用(Invoke)的概念。


将java管理或者包装的资源通过一定的协议开发出去, 这个管理的东西就MBean, 而MBean所存在的容器就是MBeanServer, 外界要使用这个容器中的MBean, 或者与这些MBean通讯, 可以使用各种通讯协议, 而容器为了适应各种协议, 就要提供各种Adapter或者Connector来与各种使用方通讯.

agent可以理解为MBeanServer的一个容器.

可以将Spring容器看成另一种形式的MBeanServer, 它将java类作为容器中的一个bean来加以管理.让外界通过统一的接口来访问所有作为bean的java类

spring中关于jmx包括几个概念:
MBeanExporter: 从字面上很容易理解, 用来将一些spring的bean作为MBean暴露给MBEanServer.
MBeanServerFactoryBean: 也可以在spring中作为一个spring bean注入, 它用来将外部或者当前机器上的MBeanServer包装成一个bean
MBeanInfoAssembler : 用来控制作为MBean的spring bean的哪些属性或方法将暴露出去,  以及决定何种形式的bean会被暴露成MBean. 不同的实现有不同的暴露方式.
ObjectNamingStrategy : 用来控制作为MBean暴露出去的spring bean在MBeanServer中将如何命名(ObjectName), 描述, 指定初始值等, ObjectName通常采用"域:键=值,键=值,...".
ConnectorServerFactoryBean : 用来给外界访问当前spring中的MBeanServer bean提供一个连接器, 也就是给MBeanServer开一个外加访问的口子, 比如"service:jmx:jmxmp://localhost:9875" 让外界通过jmxmp协议, 通过9875端口来访问MBeanServer, 外界要访问MBeanServer, 必须提供一个connector. 默认连接器是jmxmp协议service:jmx:jmxmp://localhost:9875 , 也可以通过其他协议的连接器, 比如协议RMI,IIOP, Burlap,Hessian,SOAP
MBeanServerConnectionFactoryBean: 用来创建一个访问MBeanServer的客户端连接器, 比如MBeanServer bean暴露了一个服务器端连接器, 那么客户端就可以通过这个连接器来访问MBeanServer中的MBean. 可以理解为ConnectorServerFactoryBean的对应物, server与client之间就是这两种连接器建立通讯连接
MBeanProxyFactoryBean: 用来创建客户端访问远程MBeanServer中的MBean的代理, 客户端要访问服务器端的bean, 除了客户端连接器之外, 还需要一个代理, 相当于一个服务器端的stub.



通过给exporter指定MBeanServer之后, exporter中暴露的MBean就会注入到MBeanServer中.
spring中要找到一个MBeanServer并注入到exporter中有多种方式(如果不指定MBeanServer, spring会自己找), MBeanServerFactoryBean是一种方式, Locator也是一种.
exporter暴露出去的MBean不会立即就放到MBeanServer中, 只有调用方发起了对MBeanServer中MBean的调用的时候, 才会初始化.

exporter将spring bean暴露为MBean有多种方式, 一种是:
<property name="beans">
      <map>
        <entry key="bean:name=testBean1" value-ref="testBean"/>
      </map>
    </property>

一种是给exporter设置
<property name="autodetect" value="true"/>

然后这样配置bean:
<bean name="spring:mbean=true" class="org.springframework.jmx.export.TestDynamicMBean"/>

分享到:
评论
1 楼 lu_pp 2008-09-24  
恩,很不错
请问有没有这方面的更多的资料,或者书籍,例子介绍呢?

相关推荐

    基于Spring+JMX+Tomcat实现资源动态管理

    基于Spring+JMX+Tomcat实现资源动态管理

    spring框架下jmx入门例子

    在spring框架下使用jmx,可以动态修改远程服务端的属性,使用http协议,可以直接通过IE查看运行结果

    JMX (三)--------spring整合JMX

    NULL 博文链接:https://90haofang-163-com.iteye.com/blog/1904451

    Spring jmx

    这是俞黎明一份关于jmx的介绍,以及如何结合spring开发jmx,是根据他的ppt改成的。

    JMX与Spring 结合

    1.JMX与SPRING 结合实例 2.标准MBean 与非标准MBean 注册 3.基于接口和注解的MBean 注册 4.发布通知,处理通知及配置

    springcloud混沌测试-demo.jmx

    springcloud混沌测试-demo.jmx

    jmx入门

    为什么JMX那么受欢迎,JMX到底有那些优势只得人们去学习和理解,本文从JMX的基本架构、hellowold jmx以及spring对JMX的支持讲起,希望大家能通过本文对JMX有个基础的认识,并能通过本文为今后学习JMX打个基础

    扩展Spring的JMX支持

    幸运的是,Spring1.2包括高级的JMX集成支持,并且JMX为应用程序提供了一种实用的管理基础架构。在本文中,ClaudeDuguay从SpringJMX更进一步,向您展示了如何为方法和属性透明地增加通知事件。最后得到的代码使您可以...

    spring jmx

    spirng jmx的用法

    jmx开发例子,包括与spring结合例子

    包括jmx与spring结合的例子。是新人学习和快速项目运用的例子。供大家参考学习。

    Spring攻略PDF版

    因为上传大小的限制,分为两部分上传,这是第二部分,第一部分会在评论中给出链接 绝对是spring攻略中文版第二版 ... 第18章 Spring对JMX、电子邮件和调度的支持   第19章 Spring中的脚本编程 

    mx4j管理jmx的jar与spring结合使用

    将jmx与spring结合的jar都下载完毕2.1.1 大家可以节省时间

    Spring攻略中文版PDF

    因为上传大小的限制,分为两部分上传,这是第一部分,第二部分会在评论中给出链接 绝对是spring攻略中文版第二版 ... 第18章 Spring对JMX、电子邮件和调度的支持   第19章 Spring中的脚本编程 

    spring-async-jmx-example:此示例演示了在Spring和JMX控制台中使用@Async批注来显示线程使用情况

    Spring Async / JMX控制台示例此示例说明: @Async注释在Spring中的用法JMX控制台显示应用程序的当前线程使用情况@Async注释配置AsyncController-AsyncController中的getAsyncResults进行完全并行的调用,并在不同的...

    Spring攻略英文版(附带源码)

    Spring专家力作 理论与实践完美结合 问题描述→解决方案→实现方法 第一部分 核心概念  第1章 控制反转和容器  ... 第18章 Spring对JMX、电子邮件和调度的支持   第19章 Spring中的脚本编程 

    spring jar 包详解

    (10) spring-support.jar 这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java Mail、COS Mail)、任务计划Scheduling(Timer、Quartz)方面的类。 (11) spring-web.jar 这个jar文件包含Web应用...

    lanlan2017#JavaReadingNotes#18.0 第18章 使用JMX监控Spring1

    第18章 使用JMX监控Spring本章内容:使用Actuator端点的MBean将Spring bean暴露为MBean发布通知JMX(Java Manage

    实现JMX的spring支持,拓展了RMI远程接口。

    JMX集成到spring中,并提供了一个rmi远程连接的配置文件

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    如果你的应用仅仅用到简单的Inversion of Control / Dependency Injection(IoC/DI)容器,那么只需spring-core.jar与spring-beans.jar即可;如果你对发布的大小要求很高,那么就得精挑细选了,只取包含自己所需特性...

    SpringJMX.pdf

    利用spring来管理控制自己的应用程序 俞黎敏 议程 软件监控与管理的简要介绍 什么是jmx以及如何使用jmx jmx相关实现 spring给jmx使用带来的便利 jmx具体用用示例

Global site tag (gtag.js) - Google Analytics