JMX(Java Management Extensions) API是JCP开发的一个标准,提供了管理和监控应用程序和服务的功能。它定义了一整套的管理构架、设计模式、API及服务供我们建立基于web的、分布式、动态和模块化的解决方案来管理基于Java的资源。
1.概述
JMX技术是Java编程语言特有的。因此,它对基于java的功能提供了自然、高效和轻量级的管理扩展。它包含一系列的规范和开发工具供我们管理Java环境及开发应用和服务的管理方案。JMX技术框架的动态性使得你可以使用它来监控和管理资源,它也可以被使用来监控和管理JVM。
JMX典型的使用场景有:
(1)查询和改变应用配置;
(2)收集应用行为的统计信息,使统计信息可视化;
(3)状态变化和错误环境的预警;
2. 使用JMX的好处
JMX技术使得Java开发者能将资源封装成Java对象并在分布式环境中把他们暴露为管理资源。JMX规范中列出了下面这些使用它来构建管理基础平台的好处:
(1)管理Java应用和服务而不需要重大的投入。JMX框架依赖于一个核心管理对象服务器,它作为一个管理agent运行在大多数的Java设备上。可以在不影响他们的设计的情况下管理Java应用;
(2)提供了一个可伸缩的管理框架:一个JMX agent服务是独立的,并且可以被插入到管理agent中。基于组件的方式使得JMX解决方案无论是小面积的设备还是大型通信开关都能适用;
(3)可以补充将来管理概念:JMX可以实现灵活和动态管理解决方案。它可以补充新兴的技术,比如JMX解决方案可以使用命名发现服务JINI或者是网络技术如UPnP,SLP;
……
3. JMX层次体系结构
JMX技术提供了一个层次体系结构,被管理的资源和应用可以被以可插拔的方式整合到框架中,给定的资源被当成一个或多个Java对象,即我们熟知的Managed Beans(或者MBeans),MBeans被注册到MBean Server(核心管理对象Server)中。MBean Server作为管理agent运行在支持java的设备上。
如上图所示,JMX构架是一个三层架构,Instrumentation、Agent及Manager。
(1)Instrumentation层
这层包含了MBeans及被它们管理的资源。它提供了一个规范来实现JMX技术可控的资源,这些资源可以是应用、服务、设备、或者是用户等。如果资源是基于Java开发的并且已经被装备(intrument)以便能被JMX应用所管理,我们就说这个资源是可控的。资源可被一个或多个不同的MBean装备(instrument),MBean可以是标准或动态的。标准MBean是某些满足一定的设计模式(如有构造函数和get/set方法)的java对象。动态MBean实现了某些接口能够提供更多的灵活性。资源的instrumentation使得它能被agent层管理。JMX管理的资源可以使用任何提供它需要的服务的JMX agent。
Intrumentation层的关键组件是MBeans、Notification Model以及MBean metadata classes;
(1)MBeans
MBean是一个实现了特定接口的Java对象。MBean的管理接口类型有:(a)可存取的值属性;(b)可被调用的操作;(c)可发出的通知(notifications);(4)构造函数;
总共有四种类型MBeans:
Standard MBeans(标准MBeans): 这是最容易设计和实现的,它们的管理接口通过方法名字来描述;
Dynamic MBeans(动态MBeans): 它们实现了一个特定的接口,并且在运行时暴露管理接口给外部以获得最大的灵活性;
Open MBeans与Model MBeans: 这两个也都属于动态MBeans,不过它们提供了一些自己的特性,如Model MBeans是在运行时完成可配置和自描述的。
(2)Notification Model(通知模型)
JMX技术基于Java的事件(event)模型定义了一个通用的notification模型。它让开发者可以建立一个proactive(积极主动)的解决方案。使用通知模型,JMX agents 和MBeans 可以给对当前事件感兴趣的管理应用程序或者是其它的MBeans发送一些重要的消息。
(3)MBean Metadata Classes
这些类包含了描述一个MBean管理接口的所有组件所需的结构:它的属性、操作、通知、构造。对于这些结构,metadata包含有名字、描述以及它的特殊性质(如,属性是否可读,可写或者都可以;操作的参数类型与返回类型)
Agent层
这一层包含了负责暴露MBeans给外部的JMX agent。它提供了实现agents的规范,agent的职责是控制资源并保证它们对远程的管理应用的可用的。Agents通常和它们管理的资源位于同一个机器上,但这并不是必须的。JMX agent包括一个MBeans服务器和一系列处理MBeans的服务。管理者存取agent的Mbeans对象并通过protocol adaptor或者connector使用它们提供的服务。但是JMX agents不需要知道使用它们的远程管理应用。
agent层的主要组件是MBean Server和Agent Services:
(1)MBean Server
它是需要暴露给agent管理操作的对象的注册点。任何对象只要注册到MBean Server中,其对管理应用程序便是可视的。需要注意的是,MBean Server暴露的只是MBean的管理接口而并非是它的直接对象引用。任何在agent的JVM以外的资源,如果你想对其进行管理,那么你必须将它注册为MBean Server中的一个MBean。MBean Server也提供了一个标准的接口给我们存取位于同一个JVM下的MBeans,使得本地对象具有操作可管理资源的所有优点。MBeans可以被其它Mbean、agent自身或者是一个远程的管理应用通过分布式服务实例化和注册。当你注册一个MBean时,你必须要给它一个唯一的对象名,管理应用程序(management application)将使用它来识别这个MBean,以执行其定义的管理操作。
(2)Agent Services
Agent Services是指可以在注册于MBean Server中的MBean上执行管理操作的对象。通过在agent中引入management intelligence,JMX能帮你构建更加强大的管理方案。 JMX API定了如下Agent Servcies,它们包含在J2SE 5.0中。
a. Dynamic Class Loader:通过管理applet服务,可以在网络中的任何位置获取和实例化新的类和原生库;
b. Monitor:观察一系列MBeans的属性值,并在它们发生各种类型变化时通知其他对象;
c. Times :提供了一个调度机制,包括有定时、重复等类型;
d. The relation service :定义了MBeans之间的关系并基于预先定义的关系类型执行此关系的集势(cardinality)。
Manager Level(管理层或者说是分布式服务层)
这一层包含了所有使得与JMX agents进行交互的管理应用程序可用的组件。它提供了供我们实现JMX管理器、定义操作agents的管理接口和组件的一系列接口。