Module  java.management
软件包  javax.management

Class StandardMBean

  • All Implemented Interfaces:
    DynamicMBeanMBeanRegistration
    已知直接子类:
    StandardEmitterMBean


    public class StandardMBean
    extends Object
    implements DynamicMBean, MBeanRegistration

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

    该类在使用标准MBean时对管理界面的概念带来更大的灵活性。 在JMX规范中描述的标准MBeans的模式的直接使用意味着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); 
    • Subclassing 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当然仍然可用。

    此类也可用于构建MXBean。 除了在上面的示例中,构造函数或super(...)调用的false参数是false ,用法与标准MBean true

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

      • StandardMBean

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

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

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

        protected StandardMBean​(Class<?> mbeanInterface)
                         throws NotCompliantMBeanException

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

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

        参数
        mbeanInterface - 此MBean导出的管理界面。
        异常
        NotCompliantMBeanException -如果 mbeanInterface不遵守JMX设计模式的管理界面,或者 如果没有实现指定的接口。
      • StandardMBean

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

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

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

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

        做一个DynamicMBean的出这一点 ,使用指定的mbeanInterface类,并选择所产生的MBean是一个MXBean。 此构造函数可用于创建标准MBean或MXBean。 与构造函数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 - 如果给定的 实现为空。
        NotCompliantMBeanException - 如果给定的 实现不实现在建设中提供的标准MBean(或MXBean)接口。
        另请参见:
        getImplementation()
      • getMBeanInterface

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

        public Class<?> getImplementationClass​()
        获取此标准MBean(或MXBean)的实现类。
        结果
        这个标准MBean(或MXBean)的实现类。
      • invoke

        public Object invoke​(String actionName,
                             Object[] params,
                             String[] signature)
                      throws MBeanException,
                             ReflectionException
        说明从接口DynamicMBean复制
        允许在动态MBean上调用操作。
        Specified by:
        invoke在接口 DynamicMBean
        参数
        actionName - 要调用的操作的名称。
        params - 包含调用操作时要设置的参数的数组。
        signature - 包含动作签名的数组。 类对象将通过与用于加载调用操作的MBean相同的类加载器来加载。
        结果
        该操作返回的对象,表示在指定的MBean上调用操作的结果。
        异常
        MBeanException - 包装由MBean调用的方法抛出的一个 java.lang.Exception
        ReflectionException - 在尝试调用该方法时抛出一个 java.lang.Exception
      • getMBeanInfo

        public MBeanInfo getMBeanInfo​()
        获取这个MBean的MBeanInfo

        该方法实现DynamicMBean.getMBeanInfo()

        此方法首先调用getCachedMBeanInfo()以检索此MBean的缓存MBeanInfo(如果有)。 如果由getCachedMBeanInfo()返回的MBeanInfo不为空,则返回。
        否则,此方法使用为此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传递,包装实现将被忽略,并返回构建函数
        结果
        MBeanConstructorInfo []为新的MBeanInfo。
      • getCachedMBeanInfo

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

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

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

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

        子类可能会重新定义此方法,以便实现自己的缓存策略。 在这种情况下,默认实现存储info 一个子类可以定义其他策略,例如不保存info (因此每次调用时都会重构getMBeanInfo() ),或者当多个StandardMBean实例具有相等的MBeanInfo值时共享一个唯一的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(...)调用重写方法是个好习惯。 如果此对象是由其他MXBean中的属性或操作引用的MXBean,则这是必需的。

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

        public void postRegister​(Boolean registrationDone)

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

        此方法的默认实现对于标准MBean不起作用。 对于MXBeans,如果注册失败,它将撤销preRegister完成的任何工作。

        对于通过super.postRegister(...)调用重写方法的子类来说,这是一个很好的做法。 如果此对象是由其他MXBean中的属性或操作引用的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(...)调用重写方法的子类来说,这是一个很好的做法。 如果此对象是由其他MXBean中的属性或操作引用的MXBean,则这是必需的。

        Specified by:
        postDeregister在接口 MBeanRegistration
        从以下版本开始:
        1.6