`
minghaitang
  • 浏览: 129075 次
社区版块
存档分类
最新评论

JMX MBeans之四Model MBean (1)

阅读更多

JMX MBeans之四Model MBean (1)

  与标准和动态MBean相比,你可以不用写MBean类,只需使用javax.management.modelmbean.RequiredModelMBean即可。RequiredModelMBean实现了ModelMBean接口,而ModelMBean扩展了DynamicMBean接口,因此与DynamicMBean相似,Model MBean的管理资源也是在运行时定义的。与DynamicMBean不同的是,DynamicMBean管理的资源一般定义在DynamicMBean中(运行时才决定管理那些资源),而model MBean管理的资源并不在MBean中,而是在外部(通常是一个类),只有在运行时,才通过set方法将其加入到model MBean中。Model MBean可以在MBean server中进行实例化,而且用户可以配置它来管理任何资源.
此外,Model MBean提供了几个特性,比如MBean的持久化以及属性值的缓存等,这些特性使得MBean变得更健壮.
  RequiredModelMBean实现ModelMBean接口.
  为了方便理解,来看看创建Model MBean的几个简单步骤:
1. 一个应用程序执行,定位JMX agent,为了通过注册一个MBean到这个agent上,从而使得自己可以被agent来管理.
2. 应用程序调用MBean Server的createMBean()方法,让它来创建一个RequiredModelMBean类的实例.
3. MBean创建好后, 程序在MBean中设置一个对象,作为被管理的资源.
4. 应用程序创建ModelMBeanInfoSupport类的一个实例, 这个对象,就像以前所提及的MBeanInfo一样,封装了这个新的Model MBean的管理接口,也就是说这个对象描述了这个被管理的资源.
5. 应用程序调用了这个新的model MBean上的方法.

Model MBean的特性:
Model MBean可以被任何JMX兼容的agent来创建, 这是个很大的优势.
有很多特性:
1. 持久化
   通过使用它的持久化机制, Model MBean可以在它所在的JMX agent的生命周期中得到存活. 每当一个Model MBean被创建的时候,它会检查判断是否从指定的位置加载了状态. 当配置一个Model MBean,你可以设置保存自身状态的间隔时间.
   这个持久化机制实现是在sun的参考实现中提供的, 通过java的对象序列化功能来把当前ModelMBeanInfo对象的状态写到一个文件中的. 当然其他比如jdbc的持久化机制也是可以实现的.
  
2. 通知记录 Notification logging
   这个特性允许Model MBean有能力对自己每个发出的通知进行记录. 当你需要对管理信息进行审计跟踪的时候,这个记录就很用.

3. 属性值缓存
   Model MBean拥有的ModelMBeanInfo对象规定了属性缓存的策略.
   比如说,策略可以这样规定,当一个属性第一次被获取的时候,可以保存在本地,下一次的访问需求可以用本地的缓存来满足. 本地的缓存值多长时间被重新更新,这个间隔时间是缓存策略规定, 用户可以来设置.
   这个能力极大提高了程序的性能. 例如,Model MBean如果管理的是一个远程资源,它就可以把属性值保存在本地,这样就避免了重复地进行远程调用来获取属性的值.
4. 操作代理
   Model MBean可以调用一个对象的接口方法,而不是直接调用被管理资源的接口.这个能力就可以让你提供方法来管理多个资源, 比如EJB, java远程对象, 或者其他对象的引用.

5. 一般通知
  Model MBean提供方法来发出一般的纯信息的通知.
 
配置Model MBean
  两个方法来配置:
1. setManagedResource(Object resource, String resoureType)
设置被管理的对象. resourceType表示这个对象引用的类型.可以取值
ObjectReference. Handle,IOR,EJBHandler, 或者 RMIReference.
2. setModelMBeanInfo(ModelMBeanInfo info)
这个参数就是描述了这个管理接口的metadata对象集合.

  由于ModelMBean接口继承了DynmicMBean接口,所以说所有的Model MBean也是Dynamic MBeans, 也就是说,所有的Model MBeans是在运行时定义它的管理接口的.不同的是Dynamic MBean是用户开发的类,必须用户构造它们自己的MBeanInfo对象来描述它们的管理接口,而Model MBean是标准的JMX类, 必须构造好它们的MBeanInfo对象,然后通过调用setModelMBeanInfo()方法来把这个info对象放到Model MBeans中去. 当管理程序得到一个MBean的MBeanInfo对象时,如果发现它是MBeanInfo的子类ModelMBeanInfoSupport的实例时,就会判定此MBean是Model MBean.

  ModelMBean继承的第二个接口是ModelMBeanNotificationBroadcaster, 这个接口声明了Model MBeans的通知处理方法.这个接口的方法可以为Model MBean的通知机制注册和取消通知监听器. 这样, Model MBeans根据配置信息可以发送属性值改变通知和其他信息型的通知.

  继承的最后一个接口是PersistentMBean. 这个接口定义了两个方法, load()和store(). load()方法试图根据ModelMBeanInfo实例中指定的位置装载MBean的状态.store()方法则是保存当前信息.

  元数据类:
ModelMBeanAttributeInfo 描述一个Model MBean的属性
ModelMBeanConstructorInfo 描述一个Model MBean的构造器
ModelMBeanNotificationInfo 描述一个Model MBean的通知
ModelMBeanOperationInfo 描述一个Model MBean的操作
ModelMBeanInfo 描述一个MBean的各种策略以及包含其他元数据对象

  使用描述符
  每个元数据对象用描述符来包含预定义的字段数据. 为了能够容纳一个Descriptor对象,每个元数据类实现了DescriptorAccess接口,这个提供了两个方法setDescritor()和getDescriptor()方法.

MBean描述符字段:
1. name   必要
2. descriptorType 必要,一般都是MBean
3. displayName  属性名称
4. persistPolicy 持久化策略
  Never(永远不保存), OnTimer(当持久化定时器到期触发保存动作,这个期限定义在persistPeriod), OnUpdate(当属性值被更新,就保存), NoMoreOfterThan(如果更新时间不是跟persistPeriod特别接近的时候就保存).这个就可以克服高度易变的数据会导致性能下降的问题), Always(和OnUpdate一样,建议使用OnUpdate)
5. persistPeriod   当persistPolicy设置为OnTimer或者NoMoreOfterThan才有效
6. persistLocation 持久化文件的路径
7. log            是否记录
8. logFile         记录文件路径
9. currencyTimeLimit 表示一个属性值有效的时间,
10.export 
11.visibility 从1到4,表示这个MBean的粒度层次,1表示最大粒度,经常会被查看的MBean,4表示最小粒度,可1能会被很少访问。
12.presentationString xml编码的字符串描述如何显示这些属性


属性描述符字段:
1. name 熟悉名
2. descriptorType 类型,通常attribute
3. value 当前属性值
4. default 如果value没值或者getMethod没有定义,将会返回此对象
5. displayName 显示名称
6. getMethod 被用来从被管理资源上获取属性值. 返回的对象保存在value字段中.
7. setMethod 被用来保存属性值.新值也会保存在value中.
8. protocolMap 这个值必须为Descriptor对象,包含了协议名称和映射的协议值对.
9. persistPolicy 类似上面的.
10.persistPeriod 类似上面的.
11.currencyTimeLimit 类似上面的.
12.lastUpdatedTimeStamp 最后一次更新的时间戳 ,为Long.toString(System.currentTimeMills())
13.visibility 整数,从1到4
14.presentationString 同上

操作描述符字段:
1. name 操作名称
2. descriptorType 通常是"operation"
3. displayName
4. value
5. currencyTimeLimit 表示值是最新,没有变旧的时间,以秒为单位
6. lastUpdatedTimeStamp
7. visibility
8. presentationString
9. targetObject
10.targetType

通知描述符字段:
1. name
2. descriptorType 通常为"notification"
3. severity 从0到6
   --0 Unknown, Indeterminate
   --1 Non recoverable
   --2 Critical, Failure
   --3 Major, Severe
   --4 Minor, Marginal, or Error
   --5 Warning
   --6 Normal, Cleared, or Informative
4. messageId
5. log
6. logFile
7. presentationString

这个例子是从sun的Example中拿出来的.
ModelAgent.java:
  - 创建一个MBean server.
  - 注册一个Model MBean到MBean server.
  - 设置Model MBean,以管理两个简单的bean,一个是TestBean, 另一个是TestBeanFriend.
  - 注册了一个类TestBeanAttributeChangeListener作为监听器,监听当TestBean中State属性改变时而发出的通知.
  - 使用Model Mbean对这两个Bean进行管理操作.

 TestBeanAttributeChangeListener.java:
  - 实现javax.management.NotificationListener接口.接受当TestBean的State值改变时由Model MBean发出的属性改变的通知.

TestBean.java:
  - 被ModelMBean管理的一个简单定义的Bean.

TestBeanFriend.java:
  - 被ModelMBean管理的一个简单定义的Bean.实现了跟TestBean相同的方法.ModelAgent测试程序使用它, 来说明和展示在同一个ModelMBean中, 如何拥有由不同对象的方法支持的多个属性.

分享到:
评论
1 楼 discolt 2012-03-06  
报错

javax.management.MBeanException: Operation addAttributeChangeNotificationListener not in ModelMBeanInfo
at javax.management.modelmbean.RequiredModelMBean.invoke(Unknown Source)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(Unknown Source)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(Unknown Source)
at ModelAgent.createEventListeners(ModelAgent.java:116)
at ModelAgent.doSimpleDemo(ModelAgent.java:83)
at ModelAgent.main(ModelAgent.java:59)
Caused by: javax.management.ServiceNotFoundException: Operation addAttributeChangeNotificationListener not in ModelMBeanInfo
... 6 more

相关推荐

    JMX IN ACTION(七)

    Model MBean由`javax.management.modelmbean.RequiredModelMBean`类定义,它是JMX代理的一个必需部分。与Dynamic MBean类似,Model MBean的管理接口是在运行时定义的。`RequiredModelMBean`类实现了`ModelMBean`接口...

    jmx学习整理里1

    Model MBean通过`javax.management.modelmbean.ModelMBean`接口和一个描述符文件(如`car-mbean-descriptor.xml`)定义其行为。 描述符文件(如`car-mbean-descriptor.xml`)包含了MBean的元数据,包括属性、操作、...

    JMX、MXBean学习

    Standard MBeans是预定义了管理接口的类,Dynamic MBeans则可以在运行时动态定义其管理接口,而Model MBeans是一种抽象层,可以将任何Java对象转换为MBean。 MXBean是JMX中的一个特殊概念,它是标准MBean的扩展,...

    JMX配置与使用

    Model MBeans是最通用的,它们基于元数据来定义MBean的行为。 5. 监控与通知: 通过JMX,可以注册监听器来接收关于MBean状态变化的通知。这可以用来实现自动化的故障检测、日志记录或者性能监控。此外,JMX还可以...

    JMX 相关

    JMX是Java平台上强大的管理和监控工具,通过MBeans、MBean Server和JMX Connectors,可以轻松地监控和管理Java应用。无论是小规模的应用还是大型分布式系统,JMX都能提供灵活且强大的管理能力。结合JConsole和...

    jmx资料

    MBeans分为标准MBean、Dynamic MBean和Model MBean三种类型,以适应不同的需求。Server是运行MBeans的环境,它负责注册、管理MBeans,并提供给Clients访问接口。Clients则通过连接到Server来访问和操作MBeans,实现...

    Java Management Extensions

    实现模型MBeans通常需要使用`ModelMBean`接口,并通过`ModelMBeanInfo`类来描述MBean的行为。 #### 五、MBean服务器 MBean服务器是JMX的核心组件之一,负责注册和管理所有的MBeans。了解如何与MBean服务器交互是...

    [课堂课件讲解]Java微服务实践-Spring Boot 监管.pptx

    JMX 还提供了通知模型(Notification Model),允许 MBean 广播管理事件,这种操作称之为通知。管理应用和其他对象注册成监听器。元信息类包含描述所有 MBean 管理接口的组件接口,其中包括属性、操作、通知和构造器...

    JMX: Developer's Quick Start Guide

    - **Model MBeans**:模型MBeans是另一种形式的MBean,它利用反射机制自动创建一个MBean实例,而无需实现特定的接口。这种类型的MBean通常用于现有类的管理,而不需要修改源代码。 #### 五、通知机制 JMX支持一种...

    JMX specification 1.4

    - **MBean(Managed Bean)**:这是JMX的核心概念之一,它是一种Java对象,用于封装被管理实体的功能和属性。 - **MBean服务器(MBean Server)**:负责管理和存储MBeans的对象,它是所有JMX操作的基础。 - **对象...

    SpringJMX.pdf

    它的前身是 **JMAPI**(Java Management API),后来演变为JMX并逐渐成为业界广泛接受的标准之一。 - **历史发展**: - **JMAPI**:Java管理API的早期版本。 - **JSR-031**:1998年被纳入JCP标准。 - **JMX 1.0**...

    Java Management Extensions管理扩展原理解析

    - **Model MBean**:使用`javax.management.modelmbean.RequiredModelMBean`,无需编写MBean类,管理资源通常在外部定义。 2. **适配层**:MBean服务器是JMX架构的核心,它负责注册MBeans,执行MBean操作,以及...

    The JBoss 4 Application Server Guide

    XMBeans 是 JBoss 特有的 MBeans 实现,它们提供了对 JMX API 的扩展。这一节详细介绍了 XMBeans 的各个组成部分,如描述符、管理类、构造函数、属性、操作和通知等。 #### 连接到 JMX 服务器 连接到 JMX 服务器...

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    20.4.2 ModelMBean实例 161 20.5 Commons Modeler 161 20.5.1 MBean描述符 162 20.5.1.1 mbean 162 20.5.1.2 attribute 163 20.5.1.3 operation 163 20.5.1.4 parameter 163 20.5.2 mbean标签实例 164 20.5.3 自己...

Global site tag (gtag.js) - Google Analytics