手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

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

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


  另外还有两类 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; 

      } 


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!