`
阅读更多
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

    ### Spring与JMX结合应用详解 #### 软件监控与管理的重要性 在现代软件开发过程中,对应用程序的监控与管理变得尤为重要。这不仅是为了确保应用程序的正常运行,更是为了提高其性能和效率。通常情况下,我们会关注...

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

    JMX与Spring的结合使得开发者能够轻松地创建和管理自定义的管理接口,而Tomcat作为服务器,通过支持JMX提供了丰富的监控和管理点。这种方式有助于实时优化性能,处理异常情况,以及在不重启服务的情况下进行配置更新...

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

    在本文中,我们将深入探讨JMX如何与Spring框架整合,以实现更高效的服务管理和监控。 首先,**Spring对JMX的支持**使得在Spring应用中注册MBeans(Managed Beans)变得简单。MBeans是JMX的核心组件,它们是可管理的...

    spring框架下jmx入门例子

    在Spring中集成JMX(Java Management Extensions)技术,可以使我们能够远程管理和监控应用中的对象,比如动态修改服务端的属性,这对于调试和性能优化非常有帮助。本教程将引导你入门Spring框架下的JMX应用。 首先...

    JMX与Spring 结合

    在实际应用中,JMX与Spring的结合可以通过Spring Boot进一步简化,Spring Boot自动配置了JMX支持,只需要简单的配置就能开启远程监控。同时,JConsole和VisualVM等工具可以帮助我们直观地查看和操作通过JMX暴露的...

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

    这个压缩包包含的是JMX开发的实例,特别提到了与Spring框架的集成。 Spring是一个广泛使用的Java企业级应用开发框架,它简化了配置、依赖注入以及事务管理等任务。Spring支持JMX,可以让你通过JMX接口管理Spring...

    spring jmx

    Spring JMX,全称为Spring Java Management Extensions,是Spring框架中的一部分,它提供了对Java管理扩展(JMX)标准的支持。JMX是一种Java平台规范,允许开发者创建、管理和监控应用程序的资源,如服务、设备、...

    JMX(一)-------MBean server

    **Spring与JMX** 在实际开发中,Spring框架提供了对JMX的全面支持。例如,在文件`spring-schedule-quartz`中,可能涉及到的是Spring如何整合Quartz调度器并使用JMX进行监控。Spring的`PlatformMBeanServer`接口可以...

    Spring2.5-Reference_zh_CN.txt

    - **Spring与JMX**:Spring支持将Bean注册到JMX MBean Server,便于远程监控和管理。 - **Spring适配器**:Spring提供了多种适配器,如JCA适配器,用于与其他系统进行集成。 - **计划任务**:Spring支持通过定时器等...

    SpringJMX.pdf

    #### 七、Spring与JMX的结合 Spring框架为JMX的使用提供了许多便利,主要包括以下几个方面: 1. **简化配置**:Spring通过XML配置文件或注解方式,简化了MBeans的注册过程。 2. **依赖注入**:可以将MBeans作为...

    springcloud混沌测试-demo.jmx

    springcloud混沌测试-demo.jmx

    jmx入门

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

    ebooks

    6. **Spring与JMX集成**: 如果书籍涉及到Spring框架,那么可能有一部分内容讲述如何将Spring应用与JMX集成,利用Spring的自动化配置和依赖注入特性简化JMX的使用。 7. **微服务架构中的JMX**: 在微服务架构中,每个...

    JMX SPRING

    综上所述,JMX Spring主要涉及Java管理和监控扩展的使用,通过Spring框架与JMX的结合,使得我们能够轻松地管理和监控Spring应用。而`.classpath`、`.project`、`WebContent`、`.settings`、`src`、`build`这些文件和...

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

    在标题“mx4j管理jmx的jar与spring结合使用”中,我们关注的重点是MX4J如何与Spring协作来实现JMX的功能。MX4J提供的`mx4j-tools-2.1.1.jar`是MX4J的核心库,包含了用于JMX操作的各种工具和API。这个版本(2.1.1)...

    JAVA JMX 学习资料

    8. **Spring对JMX的支持**: Spring框架提供对JMX的全面支持,可以方便地注册MBeans,以及集成Spring的管理功能。 9. **安全性**: JMX支持安全管理,可以通过JMX Security API设置权限,限制客户端对MBeans的...

    jmx所需的jar

    JMX可以与其他Java技术结合使用,如Spring框架中的Spring JMX,它提供了更方便的集成方式。此外,许多开源工具和应用服务器,如JConsole、VisualVM等,都利用JMX来提供可视化的监控界面。 总的来说,`jmx-1_2_1-ri....

    书籍JMX-IN-ACTION

    本书还深入讨论了JMX与其他技术的集成,如JMX与Spring框架的整合,以及JMX在分布式系统中的应用,包括集群管理和跨节点通信。此外,书中还涉及到了安全管理,包括JMX连接的安全策略和认证机制,以确保管理系统安全...

    Spring攻略PDF版

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

Global site tag (gtag.js) - Google Analytics