zoukankan      html  css  js  c++  java
  • HelloWorldModelMBean

    package mbeanTest;
    
    import java.lang.reflect.Constructor;
    
    import javax.management.Descriptor;
    import javax.management.InstanceNotFoundException;
    import javax.management.MBeanException;
    import javax.management.MBeanOperationInfo;
    import javax.management.MBeanParameterInfo;
    import javax.management.RuntimeOperationsException;
    import javax.management.modelmbean.DescriptorSupport;
    import javax.management.modelmbean.InvalidTargetObjectTypeException;
    import javax.management.modelmbean.ModelMBeanAttributeInfo;
    import javax.management.modelmbean.ModelMBeanConstructorInfo;
    import javax.management.modelmbean.ModelMBeanInfo;
    import javax.management.modelmbean.ModelMBeanInfoSupport;
    import javax.management.modelmbean.ModelMBeanOperationInfo;
    import javax.management.modelmbean.RequiredModelMBean;
    
    public class HelloWorldModelMBean extends RequiredModelMBean
    {
        public HelloWorldModelMBean() throws Exception
        {}
    
        public static RequiredModelMBean createModelBean() throws RuntimeOperationsException, MBeanException,
                                                                InstanceNotFoundException, InvalidTargetObjectTypeException
        {
            // 模型MBean信息
            ModelMBeanInfo info = buildModelMBeanInfo();
            // 模型MBean
            RequiredModelMBean modelMBean = new RequiredModelMBean(info);
            // 目前只支持ObjectReference,将来可能会支持ObjectReference", "Handle", "IOR", "EJBHandle",
            // or "RMIReference,
            // RMIReference从名字上可以看出,如果支持的话,那么以后就可以支持远程MBean引用
            modelMBean.setManagedResource(new HelloWorld(), "ObjectReference");
            return modelMBean;
        }
    
        protected static ModelMBeanInfo buildModelMBeanInfo() throws RuntimeOperationsException, MBeanException
        {
            // --
            // attributes
            // ------------------------------------------------------------------
            ModelMBeanAttributeInfo[] attributes = new ModelMBeanAttributeInfo[1];
    
            // 设置属性
            Descriptor nameDesc = new DescriptorSupport();
            nameDesc.setField("name", "hello");
            nameDesc.setField("value", "这是value的值");
            nameDesc.setField("hee", "这是hee的值");
            nameDesc.setField("displayName", "myname");
            nameDesc.setField("setMethod", "setHello");
            nameDesc.setField("getMethod", "getHello");
            nameDesc.setField("descriptorType", "attribute");
            attributes[0] = new ModelMBeanAttributeInfo("hello",
                    "java.lang.String", "name say hello to", true, true, false,
                    nameDesc);
           String[] sa =  nameDesc.getFields();
            // --
            // operations
            // -------------------------------------------------------------------
            ModelMBeanOperationInfo[] operations = new ModelMBeanOperationInfo[2];
            String className = HelloWorld.class.getName();
    
            // getName method
            Descriptor getDesc = new DescriptorSupport(new String[]
            { "name=getHello", "descriptorType=operation", "class=" + className,
                    "role=operation" });
            operations[0] = new ModelMBeanOperationInfo("getHello", "get hello  ",
                    null, null, MBeanOperationInfo.ACTION, getDesc);
    
            Descriptor setDesc = new DescriptorSupport(new String[]
            { "name=setHello", "descriptorType=operation", "class=" + className,
                    "role=operation" });
            operations[1] = new ModelMBeanOperationInfo("setHello", "set hello  ",
                    new MBeanParameterInfo[]
                    { new MBeanParameterInfo("a", "java.lang.String",
                            " a method's arg ") }, null, MBeanOperationInfo.ACTION,
                    setDesc);
    
            // constructors
            ModelMBeanConstructorInfo[] constructors = new ModelMBeanConstructorInfo[1];
            Constructor<?>[] ctors = HelloWorld.class.getConstructors();
    
            constructors[0] = new ModelMBeanConstructorInfo("default constructor",
                    ctors[0], null);
    
            // ModelMBeanInfo
            ModelMBeanInfo mmbeanInfo = new ModelMBeanInfoSupport(className,
                    "Simple implementation of model bean.", attributes, null,
                    operations/* null */, null, null);
    
            // 设置一个Descriptor策略,这样RequiredModelMBean改变 Attribute值得时候会记录日志
            // 当然RequiredModelMBean还需要addAttributeChangeNotificationListener,注册一个监听器
            Descriptor globalDescriptor = new DescriptorSupport(new String[]
            { "name=HelloWorldModelMBean", "displayName=globaldescriptor",
                    "descriptorType=mbean", "log=T", "logfile=hello.log" });
            mmbeanInfo.setMBeanDescriptor(globalDescriptor);
    
            return mmbeanInfo;
        }
    }
  • 相关阅读:
    通过HttpListener实现简单的Http服务
    WCF心跳判断服务端及客户端是否掉线并实现重连接
    NHibernate初学六之关联多对多关系
    NHibernate初学五之关联一对多关系
    EXTJS 4.2 资料 跨域的问题
    EXTJS 4.2 资料 控件之Grid 那些事
    EXTJS 3.0 资料 控件之 GridPanel属性与方法大全
    EXTJS 3.0 资料 控件之 Toolbar 两行的用法
    EXTJS 3.0 资料 控件之 combo 用法
    EXTJS 4.2 资料 控件之 Store 用法
  • 原文地址:https://www.cnblogs.com/wangyonglong/p/7427204.html
Copyright © 2011-2022 走看看