转载:http://www.itisedu.com/phrase/200604261751455.html JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。 Java管理扩展JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。 Java管理扩展JMX的前身是JMAPI。 Java管理扩展JMX致力于解决分布式系统管理的问题,因此,能够适合于各种不同的环境是非常重要的。为了能够利用功能强大的Java计算环境解决这一的问题,Sun公司扩充了Java基础类库,开发了专用的管理类库。 JMX是一种应用编程接口,可扩充对象和方法的集合体,可以用于跨越一系列不同的异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用它提供了用户界面指导、Java类和开发集成系统、网络及网络管理应用的规范。 管理对象是JMX应用程序的核心。JMX结构包括:支持Java的Web浏览器用户接口,管理运行模块ARM(Admin Runtime Module)和应用。这三个部件之间通过RMI(Remote Method Invocation)进行通信。这里需要说明的是,RMI是使得一个Java虚拟机(JVM)上运行的程序可以调用远程服务器上另一个JVM总的对象。 用户接口用来发布管理操作,这些操作可以间接的通过浏览器或通过单独的应用程序来激发。管理运行模块用来给应用提供实例化的管理对象。它包括Agent对象接口,通知接口和被管数据接口。应用指的是那些被管设备单元。 JMX是一个完整的网络管理应用程序开发环境,它同时提供了:厂商需要收集的完整的特性清单,可生成资源清单表格,图形化的用户接口;访问SNMP的网络API;主机间远程过程调用;数据库访问方法。 JMX这一轻型的管理基础结构,价值在于对被管理资源的服务实现了抽象,提供了低层的基本类集合,开发人员在保证大多数的公共管理类的完整性和一致性的前提下,进行扩展以满足特定网络管理应用的需要。 JMX注重于构造管理工具的软件框架,并尽量采用已成熟的技术。 JMX可以用来管理网络,设备,应用程序等资源,当前规范为1.2版。 一、Java管理扩展JMX的优点 1:可以非常容易的使应用程序具有被管理的功能
JMX框架 1)设备层(Instrumentation Level):主要定义了信息模型。在JMX中,各种管理对象以管理构件的形式存在,需要管理时,向MBean服务器进行注册。该层还定义了通知机制以及一些辅助元数据类。
该层还定义了通知机制以及实现管理构件的辅助元数据类。
管理接口就是被管理资源暴露出的一些信息,通过对这些信息的修改就能控制被管理资源。一个管理构件的管理接口包括: 管理构件通过公共的方法以及遵从特定的设计模式封装了属性和操作,以便暴露给管理应用程序。例如,一个只读属性在管理构件中只有Get方法,既有Get又有Set方法表示是一个可读写的属性。 其余的JMX的构件,例如JMX代理提供的各种服务,也是作为一个管理构件注册到代理中才能提供相应的服务。 JMX对管理构件的存储位置没有任何限制,管理构件可以存储在运行JMX代理的Java虚拟机的类路径的任何位置,也可以从网络上的任何位置导入。 JMX定义了四种管理构件:标准、动态、开放和模型管理构件。每一种管理构件可以根据不同的环境需要进行制定。 1.标准管理构件 标准管理构件的设计和实现是最简单的,它们的管理接口通过方法名来描述。标准管理构件的实现依靠一组命名规则,称之为设计模式。这些命名规则定义了属性和操作。检查标准管理构件接口和应用设计模式的过程被称为内省(Introspection)[22]。JMX代理通过内省来查看每一个注册在MBean 服务器上的管理构件的方法和超类,看它是否遵从一定设计模式,决定它是否代表了一个管理构件,并辨认出它的属性和操作。 2.动态管理构件 动态管理构件提供了更大的灵活性,它可以在运行期暴露自己的管理接口。它的实现是通过实现一个特定的接口DynamicMBean(如下图)。
3.开放管理构件 开放管理构件是一种专门化的动态管理构件,其中所有的与该管理构件相关的参数、返回类型和属性都围绕一组预定义的数据类型(String、Integer、Float 等)来建立,并且通过一组特定的接口来进行自我描述。JMX代理通过获得一个OpenMBeanInfo对象来获取开放管理构件的管理接口,OpenMBeanInfo是MbeanInfo的子类。 4.模型管理构件 模型管理构件也是一种专门化的动态管理构件。它是预制的、通用的和动态的 MBean 类,已经包含了所有必要缺省行为的实现,并允许在运行时添加或覆盖需要定制的那些实现。JMX规范规定该类必须实现为javax.management.modelmbean.RequiredModelMBean,管理者要做的就是实例化该类,并配置该构件的默认行为并注册到JMX代理中,即可实现对资源的管理。JMX代理通过获得一个ModelMBeanInfo对象来获取管理接口。 模型管理构件具有以下新的特点[23]:
为此,JMX定义了通知模型。通知模型仅仅涉及了在同一个JMX代理中的管理构件之间的事件传播。JMX通知模型依靠以下几个部分: 发送一个通用类型的通知,任何一个监听者都会得到该通知。因此,监听者需提供过滤器来选择所需要接受的通知。 任何类型的管理构件,标准的或动态的,都可以作为一个通知发送者,也可以作为一个通知监听者,或两者都是。
部分辅助元类如下:
1.3.1 MBean服务器
连接器还必须提供管理应用一方的接口以使代理和管理应用程序进行通信,即针对不同的协议,连接器必须提供同样的远程接口来封装通信过程。当远程应用程序使用这个接口时,就可以通过网络透明的和代理进行交互,而忽略协议本身。 适配器和连接器使MBean服务器与管理应用程序能进行通信。因此,一个代理要被管理,它必须提供至少一个协议适配器或者连接器。面临多种管理应用时,代理可以包含各种不同的协议适配器和连接器。 当前已经实现和将要实现的协议适配器和连接器包括:
JMX规范定义了代理服务有: 1.动态类装载 动态类装载是通过m-let(management applet)服务来实现的,它可以从网络上的任何URL处下载并实例化管理构件,然后向MBean服务器注册。在一个M-let服务过程中,首先是下载一个m-let文本文件,该文件是XML格式的文件,文件的内容标识了管理构件的所有信息,比如构件名称、在MBean服务器中唯一标识该构件的对象名等。然后根据这个文件的内容,m-let服务完成剩余的任务。下图例示这一过程:
通过使用监视服务,管理构件的属性值就会被定期监视,从而保证始终处于一个特定的范围。当监视的属性值的变化超出了预期定义的范围,一个特定的通告就会发出。JMX规范当前规定了三种监视器: 1)计数器监视器,监视计数器类型的属性值,通常为整型,且只能按一定规律递增。 每一个监视器都是作为一个标准管理构件存在的,需要提供服务时,可以由相应的管理构件或远程管理应用程序动态创建并配置注册使用。 下图例示了计数器监视器的使用情况:
时间服务可以在制定的时间和日期发出通告,也可以定期的周期性的发出通告,依赖于管理应用程序的配置。时间服务也是一个管理构件,它能帮助管理应用程序建立一个可配置的备忘录,从而实现智能管理服务。 4.关系服务 JMX规范定义了管理构件之间的关系模型。一个关系是用户定义的管理构件之间的N维联系。 关系模型定义如下一些术语: 1)角色:就是是一个关系中的一类成员身份,它含有一个角色值。 在关系服务中,管理构件之间的关系由通过关系类型确定的关系实例来维护。仅仅只有注册到MBean服务器上并且能被对象名标识的管理构件才能成为一个关系的成员。关系服务从来就不直接操作它的成员--管理构件,为了方便查找它仅仅提供了对象名。 关系服务能锁定不合理关系类型的创建,同样,不合理的关系的创建也会被锁定。角色值的修正也要遵守一致性检查。 由于关系是定义在注册的管理构件之间的联系,所以当其中的管理构件卸载时,就会更改关系。关系服务会自动更改角色值。所有对关系实例的操作比如创建、更新、删除等都会使关系服务发出通告,通告会提供有关这次操作的信息。 JMX关系模型只能保证所有的管理构件满足它的设计角色,也就是说,不允许一个管理构件同时出现在许多关系中。
该层规定了实现JMX应用管理平台的接口。这一层定义了能对代理层进行操作的管理接口和组件。这些组件能: 通过管理应用层和另一管理代理和以及他的设备层的联合,就可以为我们提供一个完整的网络管理的解决方案。这个解决方案为我们带来了独一无二的一些优点:轻便、根据需要部署、动态服务、还有安全性。
这些附加的协议API并没有定义管理应用的功能,或者管理平台的体系结构,他们仅仅定义了标准的Java API和现存的网络管理技术通信,例如SNMP。 网络管理平台和应用的开发者可以用这些API来和他们的管理环境进行交互,并将这个交互过程封装在一个JMX管理资源中。例如,通过SNMP可以对一个运行有SNMP代理的交换机进行管理,并将这些管理接口封装成为一个管理构件。在动态网络管理中,可以随时更换这些管理构件以适应需求。 这些API可以帮组开发者根据最通常的工业标准来部署他们的管理平台和应用。新的网路管理的解决方案可以和现存的基础结构合为一体,这样,现存的网络管理也能很好的利用基于Java技术的网络管理应用。 这些API目前在JCP(Java Community Process)内作为独立的JSR(Java Specification Request)开发。 他们包括:
1)SUN为JMX规范了作出了相应的参考实现,并在此基础上开发了一个全新的用于网络管理的产品JDMK(Java动态管理工具集),其中定义了资源的开发过程和方法、动态JMX代理的实现、远程管理应用的实现。同时,JDMK也提供了一个完整的体系结构用来构造分布式的网络管理系统,并提供了多种协议适配器和连接器,如SNMP协议适配器、HTML协议适配器、HTTP连接器、RMI连接器。
。可减少对JAVA应用实施管理的投资 四、JMX架构的了解 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的了解: 1.到java.sun.com首页的JMX页面,下载JMX的规定说明和Samples程序。 我们来做一个Hello 的MBean,这里有一个小关键点,你的class取名有个规则, 需要以MBean为结尾,如这里我们取名为HelloMbean:
// management attributes // management operations } 在这个Class里,有一个隐含attributes: name, 提供了set和get的方法,同时有一个操作方法print(): 再定义一个concrete类: public class Hello implements HelloMBean { private String name = ""; public String getName() { public void setName(String name) { public void print() {
再按 Tutorial启动BaseAgent,在Agent Administration中参考Simple填入: Keys : name=Hello,number=1 Java Class: Hello 将出现Create Successful信息。进入MBean View 给Name赋值,点按Apply ,然后再按print,这是你的Hello中的方法,在控制台你会看到输出。 是不是很惊奇Hello中的 attributes 和operations能被动态的访问和控制? 已经隐约感到JMX的架构原理了吧? 下面再深入明确一些概念: 那么我们能否在程序中自动管理和部署我的MBean?当然可以,这是通过Agent层来完成,现在我们已经有了这个层次,MBean所在的资源层, 从图中看出,Agent Level(Agent层)包括MBean Server和Agent Services,那么我们来做一个上面例子HelloMBean的Agent: // CREATE the MBeanServer // CREATE Registe HelloMBean ObjectName hello_name = null; //将HelloMBean注册到MBeanServer中去 向MBeanServer注册后,以后JMX就知道有了这个HelloMBean资源。 管理一个agent的MBean资源或使用它提供的服务必须通过一个protocol adaptor 或者connector,adaptor 或者connector属于Distributed layer level(Distributed服务层),我们上面例子中通过HTTP WEB界面管理HelloMBean就是浏览器通过HtmlAdaptor这个adaptor来实现的。 通过本篇文章,你应该大体了解了JMX的架构和一些原理和应用,再深入可以研究SUN的JMX Specification. |