Module java.management
Package javax.management

Class StandardMBean

java.lang.Object
javax.management.StandardMBean
所有已实现的接口:
DynamicMBean, MBeanRegistration
直接已知的子类:
StandardEmitterMBean

public class StandardMBean extends Object implements DynamicMBean, MBeanRegistration

通过在Java接口上反射确定其管理接口的MBean。

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

通过将MBean转换为DynamicMBean,这个类使得可以选择MBean实现的任何接口作为其管理接口,只要符合JMX模式(即,由getter/setter等定义属性)。

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

使用这个类,可以以两种一般方式之一创建具有任何实现类名Impl和具有管理接口定义(与当前标准MBean相同)的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);
           }
           // 实现Intf的方法
         }
    
         [...]
    
         MBeanServer mbs;
         ....
         Impl impl = new Impl();
         mbs.registerMBean(impl, objectName);
         

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

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

这个类也可以用于构造MXBeans。使用方式与标准MBean完全相同,只是在上述示例中,构造函数或super(...)调用的false参数改为true

自从:
1.5
  • Constructor Details

    • StandardMBean

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

      将对象implementation转换为DynamicMBean,使用指定的mbeanInterface类。

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

      protected StandardMBean(Class<?> mbeanInterface) throws NotCompliantMBeanException

      this转换为DynamicMBean,使用指定的mbeanInterface类。

      调用this(this,mbeanInterface)。此构造函数保留给子类使用。

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

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

      将对象implementation转换为DynamicMBean,使用指定的mbeanInterface类,并选择生成的MBean是否为MXBean。此构造函数可用于创建标准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 - 如果给定的implementation为null,或者mbeanInterface不遵循管理接口的JMX设计模式,或者给定的implementation未实现指定的接口。
      自从:
      1.6
    • StandardMBean

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

      this转换为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设计模式,或者如果this没有实现指定的接口。
      自版本:
      1.6
  • Method Details

    • setImplementation

      public void setImplementation(Object implementation) throws NotCompliantMBeanException

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

      参数:
      implementation - 此标准MBean(或MXBean)的新实现。 implementation对象必须实现在构造此StandardMBean时提供的标准MBean(或MXBean)接口。
      抛出:
      IllegalArgumentException - 如果给定的implementation为null。
      NotCompliantMBeanException - 如果给定的implementation没有实现在构造时提供的标准MBean(或MXBean)接口。
      参见:
    • getImplementation

      public Object getImplementation()
      获取此标准MBean(或MXBean)的实现。
      返回:
      此标准MBean(或MXBean)的实现。
      参见:
    • getMBeanInterface

      public final Class<?> getMBeanInterface()
      获取此标准MBean(或MXBean)的管理接口。
      返回:
      此标准MBean(或MXBean)的管理接口。
    • getImplementationClass

      public Class<?> getImplementationClass()
      获取此标准MBean(或MXBean)的实现类。
      返回:
      此标准MBean(或MXBean)的实现类。
    • getAttribute

      public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException
      从接口复制的描述: DynamicMBean
      获取动态MBean的特定属性的值。
      指定者:
      getAttribute 在接口 DynamicMBean
      参数:
      attribute - 要检索的属性的名称
      返回:
      检索到的属性的值。
      抛出:
      AttributeNotFoundException - 如果指定的属性不存在或无法检索
      MBeanException - 包装了MBean的getter抛出的java.lang.Exception
      ReflectionException - 在尝试调用getter时抛出的java.lang.Exception的包装。
      参见:
    • setAttribute

      从接口复制的描述: DynamicMBean
      设置动态MBean的特定属性的值。
      指定者:
      setAttribute 在接口 DynamicMBean
      参数:
      attribute - 要设置的属性的标识和要设置的值。
      抛出:
      AttributeNotFoundException - 如果指定的属性不存在或无法检索
      InvalidAttributeValueException - 如果指定的值对属性无效
      MBeanException - 包装了MBean的setter抛出的java.lang.Exception
      ReflectionException - 在尝试调用MBean的setter时抛出的java.lang.Exception的包装。
      参见:
    • getAttributes

      public AttributeList getAttributes(String[] attributes)
      从接口复制的描述: DynamicMBean
      获取动态MBean的多个属性的值。
      指定者:
      getAttributes 在接口 DynamicMBean
      参数:
      attributes - 要检索的属性列表。
      返回:
      检索到的属性列表。
      参见:
    • setAttributes

      public AttributeList setAttributes(AttributeList attributes)
      从接口复制的描述: DynamicMBean
      设置动态MBean的多个属性的值。
      指定者:
      setAttributes 在接口 DynamicMBean
      参数:
      attributes - 属性列表:要设置的属性的标识和要设置的值。
      返回:
      设置的属性列表及其新值。
      参见:
    • invoke

      public Object invoke(String actionName, Object[] params, String[] signature) throws MBeanException, ReflectionException
      从接口复制的描述: DynamicMBean
      允许在动态MBean上调用操作。
      指定者:
      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不为null,则返回该MBeanInfo。
      否则,此方法使用为此MBean指定的管理接口构建默认的MBeanInfo。

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

      指定者:
      getMBeanInfo 在接口 DynamicMBean
      返回:
      该MBean的缓存MBeanInfo,如果不为null,则返回新构建的MBeanInfo。
    • getClassName

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

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

      protected String getDescription(MBeanFeatureInfo info)

      自定义钩子:获取将在此MBean返回的MBeanFeatureInfo中使用的描述。

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

      此方法由getDescription(MBeanAttributeInfo)getDescription(MBeanOperationInfo)getDescription(MBeanConstructorInfo)调用。

      参数:
      info - 通过反射派生的默认MBeanFeatureInfo。
      返回:
      给定MBeanFeatureInfo的描述。
    • 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中使用的sequence MBeanParameterInfo的描述。
      子类可以重新定义此方法以提供其自定义描述。默认实现返回param.getDescription()
      参数:
      ctor - 通过反射派生的默认MBeanConstructorInfo。
      param - 通过反射派生的默认MBeanParameterInfo。
      sequence - 考虑的参数的序号(第一个参数为“0”,第二个参数为“1”等)。
      返回:
      给定MBeanParameterInfo的描述。
    • getParameterName

      protected String getParameterName(MBeanConstructorInfo ctor, MBeanParameterInfo param, int sequence)
      自定义钩子:获取将在此MBean返回的MBeanConstructorInfo中使用的sequence 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中使用的impact标志。
      子类可以重新定义此方法以提供其自定义影响标志。默认实现返回info.getImpact()
      参数:
      info - 通过反射派生的默认MBeanOperationInfo。
      返回:
      给定MBeanOperationInfo的影响标志。
    • getParameterName

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

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

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

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

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

      返回:
      缓存的MBeanInfo,如果没有缓存MBeanInfo,则返回null。
      参见:
    • cacheMBeanInfo

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

      子类可以重新定义此方法以实现自己的缓存策略。默认实现将info存储在此实例中。子类可以定义其他策略,例如不保存info(因此每次调用getMBeanInfo()时都会重新构建)或在多个StandardMBean实例具有相等的MBeanInfo值时共享唯一的MBeanInfo对象。

      参数:
      info - 要缓存的新MBeanInfo。任何先前缓存的值都将被丢弃。此参数可以为null,如果为null,则没有新的缓存值。
    • preRegister

      public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception

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

      此方法的默认实现返回name参数。对于标准MBean,它不执行其他操作。对于MXBeans,它记录MBeanServerObjectName参数,以便可以用于转换MXBean之间的引用。

      如果子类重写此方法,则最好通过super.preRegister(...)调用重写的方法。如果此对象是由其他MXBean的属性或操作引用的MXBean,则这是必要的。

      指定者:
      preRegister 在接口 MBeanRegistration
      参数:
      server - 将注册MBean的MBean服务器。
      name - MBean的对象名称。如果在MBeanServer接口的createMBeanregisterMBean方法的name参数为null,则此名称为null。在这种情况下,此方法必须为新MBean返回一个非null的ObjectName。
      返回:
      MBean要注册的名称。此值不能为空。如果name参数不为null,则通常但不一定是返回的值。
      抛出:
      IllegalArgumentException - 如果这是一个MXBean且name为null。
      InstanceAlreadyExistsException - 如果这是一个MXBean,并且它已经在MBean服务器中或其他地方使用另一个名称注册。
      Exception - 此方法不会抛出其他已检查异常,但声明Exception以便子类可以重写该方法并抛出自己的异常。
      自从:
      1.6
    • postRegister

      public void postRegister(Boolean registrationDone)

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

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

      如果子类重写此方法,最好通过super.postRegister(...)调用重写的方法。如果此对象是其他MXBeans中的属性或操作引用的MXBean,则这是必要的。

      指定者:
      postRegister 在接口 MBeanRegistration
      参数:
      registrationDone - 表示MBean是否已成功在MBean服务器中注册。值false表示注册阶段失败。
      自从:
      1.6
    • preDeregister

      public void preDeregister() throws Exception

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

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

      如果子类重写此方法,最好通过super.preDeregister(...)调用重写的方法。

      指定者:
      preDeregister 在接口 MBeanRegistration
      抛出:
      Exception - 此方法不会抛出已检查异常,但声明Exception以便子类可以重写此方法并抛出自己的异常。
      自从:
      1.6
    • postDeregister

      public void postDeregister()

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

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

      如果子类重写此方法,最好通过super.postRegister(...)调用重写的方法。如果此对象是其他MXBeans中的属性或操作引用的MXBean,则这是必要的。

      指定者:
      postDeregister 在接口 MBeanRegistration
      自从:
      1.6