模块  java.management
软件包  javax.management

Class StandardMBean

  • 实现的所有接口
    DynamicMBeanMBeanRegistration
    已知直接子类:
    StandardEmitterMBean

    public class StandardMBean
    extends Object
    implements DynamicMBean, MBeanRegistration

    一个MBean,其管理接口由Java接口上的反射决定。

    在使用标准MBean时,此类为管理接口的概念带来了更大的灵活性。 直接使用JMX规范中描述的标准MBean模式意味着MBean的实现类与其管理接口之间存在固定关系(即,如果实现类是Thing,则管理接口必须是ThingMBean)。 该类使得可以保持使用Java接口指定管理接口的便利性,而不需要在实现和接口类之间存在任何命名关系。

    通过从MBean中创建DynamicMBean,此类可以选择MBean实现的任何接口作为其管理接口,前提是它符合JMX模式(即getter / setter等定义的属性...)。

    该类还提供了钩子,可以为DynamicMBean接口返回的MBeanInfo提供自定义描述和名称。

    使用此类,可以使用任何实现类名称Impl创建MBean,并使用任何接口Intf定义管理接口(对于当前的标准MBean),采用以下两种方式之一:

    • 使用公共构造函数StandardMBean(impl,interface)
        MBeanServer mbs;
           ...
           Impl impl = new Impl(...);
           StandardMBean mbean = new StandardMBean(impl, Intf.class, false);
           mbs.registerMBean(mbean, objectName); 
    • 子类化StandardMBean:
        public class Impl extends StandardMBean implements Intf {
              public Impl() {
                super(Intf.class, false);
             }
             // implement methods of Intf
           }
      
           [...]
      
           MBeanServer mbs;
           ....
           Impl impl = new Impl();
           mbs.registerMBean(impl, objectName); 

    在任何一种情况下,类Impl都必须实现接口Intf

    基于实现和接口类之间的命名关系的标准MBean当然仍然可用。

    该类也可用于构造MXBeans。 用法与标准MBean完全相同,除了在上面的示例中,构造函数的false参数或super(...)调用是true

    从以下版本开始:
    1.5
    • 构造方法详细信息

      • StandardMBean

        public StandardMBean​(T implementation,
                             <T> mbeanInterface)
                      throws NotCompliantMBeanException

        使用指定的mbeanInterface类从对象实现中创建DynamicMBean。

        参数类型
        T - 允许编译器检查implementation是否确实实现了mbeanInterface描述的类。 编译器只能检查这一点,如果mbeanInterface是一类文本如MyMBean.class
        参数
        implementation - 此MBean的实现。
        mbeanInterface - 此MBean实现导出的管理接口。 如果是null ,则此对象将使用标准JMX设计模式来确定与给定实现关联的管理接口。
        异常
        IllegalArgumentException - 如果给定的 实现为null。
        NotCompliantMBeanException - 如果 mbeanInterface不遵循管理接口的JMX设计模式,或者给定的 实现未实现指定的接口。
      • StandardMBean

        protected StandardMBean​(<?> mbeanInterface)
                         throws NotCompliantMBeanException

        做一个DynamicMBean的出这一点 ,使用指定的mbeanInterface类。

        致电this(this,mbeanInterface) 此构造函数保留给子类。

        参数
        mbeanInterface - 此MBean导出的管理接口。
        异常
        NotCompliantMBeanException - 如果 mbeanInterface不遵循管理接口的JMX设计模式,或者 操作未实现指定的接口。
      • StandardMBean

        public StandardMBean​(T implementation,
                             <T> mbeanInterface,
                             boolean isMXBean)

        使用指定的mbeanInterface类从对象实现中创建DynamicMBean,并选择生成的MBean是否为MXBean。 此构造函数可用于制作标准MBean或MXBeans。 与构造函数StandardMBean(Object, Class)不同,它不会抛出NotCompliantMBeanException。

        参数类型
        T - 允许编译器检查implementation确实实现了mbeanInterface描述的类。 编译器只能检查这一点,如果mbeanInterface是一类文本如MyMBean.class
        参数
        implementation - 此MBean的实现。
        mbeanInterface - 此MBean实现导出的管理接口。 如果为null ,则此对象将使用标准JMX设计模式来确定与给定实现关联的管理接口。
        isMXBean - 如果为true,则 mbeanInterface参数命名为MXBean接口,结果MBean为MXBean。
        异常
        IllegalArgumentException - 如果给定的 实现为null,或者 mbeanInterface不遵循管理接口的JMX设计模式,或者给定的 实现未实现指定的接口。
        从以下版本开始:
        1.6
      • StandardMBean

        protected StandardMBean​(<?> mbeanInterface,
                                boolean isMXBean)

        做一个DynamicMBean的出这一点 ,使用指定的mbeanInterface类,并选择所产生的MBean是一个MXBean。 此构造函数可用于制作标准MBean或MXBeans。 与构造函数StandardMBean(Object, Class)不同,它不会抛出NotCompliantMBeanException。

        致电this(this, mbeanInterface, isMXBean) 此构造函数保留给子类。

        参数
        mbeanInterface - 此MBean导出的管理接口。
        isMXBean - 如果为true,则 mbeanInterface参数命名MXBean接口,结果MBean为MXBean。
        异常
        IllegalArgumentException - 如果 mbeanInterface不遵循管理接口的JMX设计模式,或者 操作未实现指定的接口。
        从以下版本开始:
        1.6
    • 方法详细信息

      • setImplementation

        public void setImplementation​(Object implementation)
                               throws NotCompliantMBeanException

        替换此对象中包含的实现对象。

        参数
        implementation - 此标准MBean(或MXBean)的新实现。 implementation对象必须实现构造此StandardMBean时提供的标准MBean(或MXBean)接口。
        异常
        IllegalArgumentException - 如果给定的 实现为null。
        NotCompliantMBeanException - 如果给定的 实现未实现构造时提供的Standard MBean(或MXBean)接口。
        另请参见:
        getImplementation()
      • getMBeanInterface

        public final <?> getMBeanInterface()
        获取此标准MBean(或MXBean)的管理界面。
        结果
        此Standard MBean(或MXBean)的管理接口。
      • getImplementationClass

        public <?> getImplementationClass()
        获取此Standard MBean(或MXBean)的实现类。
        结果
        此Standard MBean(或MXBean)的实现类。
      • getMBeanInfo

        public MBeanInfo getMBeanInfo()
        获取此MBean的MBeanInfo

        此方法实现DynamicMBean.getMBeanInfo()

        此方法首先调用getCachedMBeanInfo() ,以便检索此MBean的缓存MBeanInfo(如果有)。 如果getCachedMBeanInfo()返回的MBeanInfo不为null,则返回它。
        否则,此方法使用为此MBean指定的管理接口为此MBean构建缺省MBeanInfo。

        在构建MBeanInfo时,此方法调用自定义挂钩,使子类可以提供自定义描述,参数名称等...
        最后,它调用cacheMBeanInfo()以缓存新的MBeanInfo。

        Specified by:
        getMBeanInfo接口 DynamicMBean
        结果
        该MBean的缓存MBeanInfo(如果不为null)或新建MBeanInfo(如果没有缓存)。
      • getClassName

        protected String getClassName​(MBeanInfo info)
        定制钩子:获取将在此MBean返回的MBeanInfo中使用的className。
        子类可以重新定义此方法以提供其自定义类名。 默认实现返回info.getClassName()
        参数
        info - 由反射派生的默认MBeanInfo。
        结果
        新MBeanInfo的类名。
      • getDescription

        protected String getDescription​(MBeanInfo info)
        定制钩子:获取将在此MBean返回的MBeanInfo中使用的描述。
        子类可以重新定义此方法以提供其自定义MBean描述。 默认实现返回info.getDescription()
        参数
        info - 由反射派生的默认MBeanInfo。
        结果
        新MBeanInfo的描述。
      • getDescription

        protected String getDescription​(MBeanAttributeInfo info)
        定制钩子:获取将在此MBean返回的MBeanAttributeInfo中使用的描述。

        子类可以重新定义此方法以提供其自定义描述。 默认实现返回getDescription((MBeanFeatureInfo) info)

        参数
        info - 由反射派生的默认MBeanAttributeInfo。
        结果
        给定MBeanAttributeInfo的描述。
      • getDescription

        protected String getDescription​(MBeanConstructorInfo info)
        自定义挂钩:获取将在此MBean返回的MBeanConstructorInfo中使用的描述。
        子类可以重新定义此方法以提供其自定义描述。 默认实现返回getDescription((MBeanFeatureInfo) info)
        参数
        info - 由反射派生的默认MBeanConstructorInfo。
        结果
        给定MBeanConstructorInfo的描述。
      • getDescription

        protected String getDescription​(MBeanConstructorInfo ctor,
                                        MBeanParameterInfo param,
                                        int sequence)
        定制钩子:获取将用于此MBean返回的MBeanConstructorInfo的序列 MBeanParameterInfo的描述。
        子类可以重新定义此方法以提供其自定义描述。 默认实现返回param.getDescription()
        参数
        ctor - 由反射派生的默认MBeanConstructorInfo。
        param - 由反射派生的默认MBeanParameterInfo。
        sequence - 考虑的参数的序列号(第一个参数为“0”,第二个参数为“1”,等等)。
        结果
        给定MBeanParameterInfo的描述。
      • getParameterName

        protected String getParameterName​(MBeanConstructorInfo ctor,
                                          MBeanParameterInfo param,
                                          int sequence)
        定制钩子:获取将用于此MBean返回的MBeanConstructorInfo的序列 MBeanParameterInfo的名称。
        子类可以重新定义此方法以提供其自定义参数名称。 默认实现返回param.getName()
        参数
        ctor - 由反射派生的默认MBeanConstructorInfo。
        param - 由反射派生的默认MBeanParameterInfo。
        sequence - 所考虑参数的序列号(第一个参数为“0”,第二个参数为“1”,等等)。
        结果
        给定MBeanParameterInfo的名称。
      • getDescription

        protected String getDescription​(MBeanOperationInfo info)
        自定义挂钩:获取将在此MBean返回的MBeanOperationInfo中使用的描述。
        子类可以重新定义此方法以提供其自定义描述。 默认实现返回getDescription((MBeanFeatureInfo) info)
        参数
        info - 由反射派生的默认MBeanOperationInfo。
        结果
        给定MBeanOperationInfo的描述。
      • getImpact

        protected int getImpact​(MBeanOperationInfo info)
        定制钩子:获取将在此MBean返回的MBeanOperationInfo中使用的操作的影响标志。
        子类可以重新定义此方法以提供其自定义影响标志。 默认实现返回info.getImpact()
        参数
        info - 由反射派生的默认MBeanOperationInfo。
        结果
        给定MBeanOperationInfo的影响标志。
      • getParameterName

        protected String getParameterName​(MBeanOperationInfo op,
                                          MBeanParameterInfo param,
                                          int sequence)
        定制钩子:获取将用于此MBean返回的MBeanOperationInfo的序列 MBeanParameterInfo的名称。
        子类可以重新定义此方法以提供其自定义参数名称。 默认实现返回param.getName()
        参数
        op - 由反射派生的默认MBeanOperationInfo。
        param - 由反射派生的默认MBeanParameterInfo。
        sequence - 考虑的参数的序列号(第一个参数为“0”,第二个参数为“1”,等等)。
        结果
        用于给定MBeanParameterInfo的名称。
      • getDescription

        protected String getDescription​(MBeanOperationInfo op,
                                        MBeanParameterInfo param,
                                        int sequence)
        定制钩子:获取将用于此MBean返回的MBeanOperationInfo的序列 MBeanParameterInfo的描述。
        子类可以重新定义此方法以提供其自定义描述。 默认实现返回param.getDescription()
        参数
        op - 由反射派生的默认MBeanOperationInfo。
        param - 由反射派生的默认MBeanParameterInfo。
        sequence - 考虑的参数的序列号(第一个参数为“0”,第二个参数为“1”,等等)。
        结果
        给定MBeanParameterInfo的描述。
      • getConstructors

        protected MBeanConstructorInfo[] getConstructors​(MBeanConstructorInfo[] ctors,
                                                         Object impl)
        定制钩子:获取将在此MBean返回的MBeanInfo中使用的MBeanConstructorInfo []。
        默认情况下,如果包装的实现不是这个 ,则此方法返回null 实际上,如果包装实现本身不是此对象,则无法通过MBeanServer.createMBean(...)调用实现构造函数来重新创建包装实现。
        否则,如果包装的实现是这样 ,则返回ctors
        如果需要,子类可以重新定义此方法以修改此行为。
        参数
        ctors - 由反射派生的默认MBeanConstructorInfo []。
        impl - 包装的实现。 如果null传递,包装实现将被忽略,并返回构建函数
        结果
        新MBeanInfo的MBeanConstructorInfo []。
      • getCachedMBeanInfo

        protected MBeanInfo getCachedMBeanInfo()
        自定义挂钩:返回为此对象缓存的MBeanInfo。

        子类可以重新定义此方法以实现自己的缓存策略。 默认实现为每个实例存储一个MBeanInfo对象。

        结果
        缓存的MBeanInfo,如果没有缓存MBeanInfo,则返回null。
        另请参见:
        cacheMBeanInfo(MBeanInfo)
      • cacheMBeanInfo

        protected void cacheMBeanInfo​(MBeanInfo info)
        自定义钩子:缓存为此对象构建的MBeanInfo。

        子类可以重新定义此方法以实现自己的缓存策略。 默认实现在此实例中存储info 子类可以定义其他政策,比如不节能info (所以它被重建每次getMBeanInfo()称)或共享的独特MBeanInfo对象时,几个StandardMBean实例具有相等MBeanInfo值。

        参数
        info - 新增MBeanInfo缓存。 任何先前缓存的值都将被丢弃。 此参数可以为null,在这种情况下,没有新的缓存值。
      • preRegister

        public ObjectName preRegister​(MBeanServer server,
                                      ObjectName name)
                               throws 异常

        允许MBean在MBean服务器中注册之前执行所需的任何操作。 如果未指定MBean的名称,则MBean可以为其注册提供名称。 如果引发任何异常,MBean将不会在MBean服务器中注册。

        此方法的默认实现返回name参数。 它对标准MBean没有任何其他作用。 对于MBeanServer ,它记录MBeanServerObjectName参数,以便它们可用于转换MXBean间引用。

        对于重写此方法的子类来说,通过super.preRegister(...)调用重写方法是一种很好的做法。 如果此对象是由其他MXBeans中的属性或操作引用的MXBean,则必须执行此操作。

        Specified by:
        preRegister接口 MBeanRegistration
        参数
        server - 将在其中注册MBean的MBean服务器。
        name - MBean的对象名称。 如果MBeanServer接口中createMBeanregisterMBean方法之一的name参数为null,则此名称为null。 在这种情况下,此方法必须为新MBean返回非null ObjectName。
        结果
        要注册MBean的名称。 此值不得为null。 如果name参数不为null,则通常但不一定是返回值。
        异常
        IllegalArgumentException - 如果这是MXBean且 name为null。
        InstanceAlreadyExistsException - 如果这是一个MXBean,并且已经在另一个名称下注册(在此MBean Server或其他名称中)。
        异常 - 此方法不会抛出其他已检查的异常,但声明了 异常 ,以便子类可以覆盖该方法并抛出它们自己的异常。
        从以下版本开始:
        1.6
      • postRegister

        public void postRegister​(Boolean registrationDone)

        允许MBean在MBean服务器中注册后或注册失败后执行所需的任何操作。

        此方法的默认实现不会对标准MBean执行任何操作。 对于MXBeans,如果注册失败,它将撤消preRegister所做的任何工作。

        对于重写此方法的子类来说,通过super.postRegister(...)调用重写方法是一种很好的做法。 如果此对象是由其他MXBeans中的属性或操作引用的MXBean,则必须执行此操作。

        Specified by:
        postRegister接口 MBeanRegistration
        参数
        registrationDone - 指示MBean是否已在MBean服务器中成功注册。 值false表示注册阶段已失败。
        从以下版本开始:
        1.6
      • preDeregister

        public void preDeregister()
                           throws 异常

        允许MBean在MBean服务器取消注册之前执行所需的任何操作。

        此方法的默认实现不执行任何操作。

        对于重写此方法的子类来说,通过super.preDeregister(...)调用重写方法是一种很好的做法。

        Specified by:
        preDeregister在界面 MBeanRegistration
        异常
        异常 - 此方法未抛出任何已检查的异常,但声明了 异常 ,以便子类可以覆盖此方法并抛出它们自己的异常。
        从以下版本开始:
        1.6
      • postDeregister

        public void postDeregister()

        允许MBean在MBean服务器中取消注册后执行所需的任何操作。

        此方法的默认实现不会对标准MBean执行任何操作。 对于MXBeans,它会删除preRegister方法记录的所有信息。

        对于重写此方法的子类来说,通过super.postRegister(...)调用重写方法是一种很好的做法。 如果此对象是由其他MXBeans中的属性或操作引用的MXBean,则必须执行此操作。

        Specified by:
        postDeregister在界面 MBeanRegistration
        从以下版本开始:
        1.6