频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Java SE 6 新特性: JMX 与系统管理

来源:论坛整理 作者:吕 晶 李夷磊 出处:巧巧读书 2007-09-09 进入讨论组
上一页 1 2 3 4 5 下一页 

  其它动态 MBean

  另外还有两类 MBean:Open MBean 和 Model MBean。实际上它们也都是动态 MBean。

  Open MBean 与其它动态 MBean 的唯一区别在于,前者对其公开接口的参数和返回值有所限制 —— 只能是基本类型或者 >javax.management.openmbean 包内的 ArrayType、CompositeType、TarbularType 等类型。这主要是考虑到管理系统的分布,很可能远端管理系统甚至 MBServer 层都不具有 MBean 接口中特殊的类。

  Model Bean

  然而,普通的动态 Bean 通常缺乏一些管理系统所需要的支持:比如持久化 MBean 的状态、日志记录、缓存等等。如果让用户去一一实现这些功能确实是件枯燥无聊的工作。为了减轻用户的负担,JMX 提供商都会提供不同的 ModelBean 实现。其中有一个接口是 Java 规范中规定所有厂商必须实现的::>javax.management.modelmbean.RequiredModelBean。通过配置 Descriptor 信息,我们可以定制这个 Model Bean, 指定哪些 MBean 状态需要记入日志、如何记录以及是否缓存某些属性、缓存多久等等。这里,我们以 RequiredModelBean 为例讨论 ModelBean。比如,我们先来看一个例子,首先是 server 端:

package modelmbean; 

public class Server { 

 private long startTime; 
  
 public Server() { } 
  
 public int start(){ 
  startTime = System.currentTimeMillis(); 
  return 0; 
 } 
  
 public long getUpTime(){ 
  return System.currentTimeMillis() - startTime; 
 } 
} 

  然后我们对它的监测如下:

package modelmbean; 

import javax.management.*; 
import javax.management.modelmbean.*; 
public class Main { 
  
 public static void main(String[] args) throws Exception{ 
  MBeanServer mBeanServer = MBeanServerFactory.createMBeanServer(); 
  RequiredModelMBean serverMBean = 
         (RequiredModelMBean) mBeanServer.instantiate( 
           "javax.management.modelmbean.RequiredModelMBean");   
   
  ObjectName serverMBeanName = 
         new ObjectName("server: id=Server"); 
  serverMBean.setModelMBeanInfo(getModelMBeanInfoForServer(serverMBeanName));   
  Server server = new Server(); 
  serverMBean.setManagedResource(server, "ObjectReference"); 
   
  ObjectInstance registeredServerMBean = 
   mBeanServer.registerMBean((Object) serverMBean, serverMBeanName); 
   
  serverMBean.invoke("start",null, null); 
   
  Thread.sleep(1000); 
   
  System.out.println(serverMBean.getAttribute("upTime")); 
  Thread.sleep(5000); 
  System.out.println(serverMBean.getAttribute("upTime")); 
 } 
  
 private static ModelMBeanInfo getModelMBeanInfoForServer(ObjectName objectName)  
  throws Exception{ 
  ModelMBeanAttributeInfo[] serverAttributes = 
        new ModelMBeanAttributeInfo[1]; 
  Descriptor upTime = 
        new DescriptorSupport( 
          new String[] { 
            "name=upTime", 
            "descriptorType=attribute", 
            "displayName=Server upTime", 
            "getMethod=getUpTime",             
             }); 
  serverAttributes[0] = 
        new ModelMBeanAttributeInfo( 
          "upTime", 
          "long", 
          "Server upTime", 
          true, 
          false, 
          false, 
          upTime); 
   
  ModelMBeanOperationInfo[] serverOperations = 
        new ModelMBeanOperationInfo[2]; 
   
  Descriptor getUpTimeDesc = 
        new DescriptorSupport( 
          new String[] { 
            "name=getUpTime", 
            "descriptorType=operation", 
            "class=modelmbean.Server", 
            "role=operation"             
            }); 
   
  MBeanParameterInfo[] getUpTimeParms = new MBeanParameterInfo[0]; 
  serverOperations[0] = new ModelMBeanOperationInfo("getUpTime", 
         "get the up time of the server", 
         getUpTimeParms, 
         "java.lang.Long", 
         MBeanOperationInfo.ACTION, 
         getUpTimeDesc); 
       
  Descriptor startDesc = 
        new DescriptorSupport( 
          new String[] { 
            "name=start", 
            "descriptorType=operation", 
            "class=modelmbean.Server", 
            "role=operation" 
            }); 
  MBeanParameterInfo[] startParms = new MBeanParameterInfo[0]; 
  serverOperations[1] = new ModelMBeanOperationInfo("start", 
         "start(): start server", 
         startParms, 
         "java.lang.Integer", 
         MBeanOperationInfo.ACTION, 
         startDesc); 
   
  ModelMBeanInfo serverMMBeanInfo = 
        new ModelMBeanInfoSupport( 
          "modelmbean.Server", 
          "ModelMBean for managing an Server", 
          serverAttributes, 
          null, 
          serverOperations, 
          null); 
   
  //Default strategy for the MBean. 
  Descriptor serverDescription = 
        new DescriptorSupport( 
          new String[] { 
            ("name=" + objectName), 
            "descriptorType=mbean", 
            ("displayName=Server"), 
            "type=modelmbean.Server", 
            "log=T", 
            "logFile=serverMX.log", 
            "currencyTimeLimit=10" }); 
  serverMMBeanInfo.setMBeanDescriptor(serverDescription); 
       return serverMMBeanInfo; 
      } 

  很明显,和其它 MBean 类似,使用 Model MBean 的过程也是下面几步:
  1. 创建一个 MBServer:mBeanServe
  2. 获得管理资源用的 MBean:serverBean
  3. 给这个 MBean 一个 ObjectName:serverMBeanName
  4. 将 serverBean 以 serverMBeanName 注册到 mBeanServer 上去
  唯一不同的是,ModelMBean 需要额外两步:

1.serverMBean.setModelMBeanInfo(getModelMBeanInfoForServer(serverMBeanName)); 
2.serverMBean.setManagedResource(server, "ObjectReference"); 

  第一步用于提供 serverMBean 的元数据,主要包括以下两类
  1. 类似于普通的动态 MBean,需要 MBean 的 Attribute、Invocation、Notification 的类型/反射信息,诸如返回类型、参数类型和相关的 get/set 方法等。这里将不再赘述。
  2. 关于缓存、持久化以及日志等的策略。后面我们将介绍一些这方面的信息。
  第二步指出了 ServerMBean 管理的对象,也就是说,从元数据中得到的 Method 将施加在哪个 Object 上。需要指出的是 >setManagedResource(Object o, String type); 中第二个参数是 Object 类型,可以是 "ObjectReference"、"Handle"、"IOR"、"EJBHandle" 或 "RMIReference"。目前 SE 中的实现只支持 "ObjectReference"。笔者认为后面几种类型是为了将来 JMX 管理对象扩展而设定的,可能将来 Model Bean 不仅可以管理 Plain Java Object(POJO),还可能管理 Native Resource, 并给诸如 EJB 和 RMI 对象的管理提供更多的特性。

  Model Bean 与普通动态 Bean 区别在于它的元数据类型 ModelMBeanInfo 扩展了前者的 MBeanInfo,使得 ModelMBeanOperationInfo、ModelMBeanConstructor_Info、ModelMBeanAttributeInfo 和 ModelMBeanNotificationInfo 都有一个额外的元数据:>javax.management.Descriptor,它是用来设定 Model Bean 策略的。数据的存储是典型的 "key-value" 键值对。不同的 Model Bean 实现,以及不同的 MBeanFeatureInfo 支持不同的策略特性。下面我们就以 Attribute 为例,看一下 RequiredModelBean 支持的策略。文章地址: http://www.qqread.com/java/2007/09/w330120.html 更多文章 更多内容请看系统优化大全网络管理实用手册系统安全设置专题,或进入讨论组讨论。
上一页 1 2 3 4 5 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章