Module java.management

Class RequiredModelMBean

java.lang.Object
javax.management.modelmbean.RequiredModelMBean
所有已实现的接口:
DynamicMBean, MBeanRegistration, ModelMBean, ModelMBeanNotificationBroadcaster, NotificationBroadcaster, NotificationEmitter, PersistentMBean

public class RequiredModelMBean extends Object implements ModelMBean, MBeanRegistration, NotificationEmitter
这个类是ModelMBean的实现。每个JMX代理都必须随附一个适当的ModelMBean实现,并且该类必须命名为RequiredModelMBean。

希望可管理的Java资源使用MBeanServer的createMBean方法实例化RequiredModelMBean。然后,资源为RequiredModelMBean实例设置MBeanInfo和描述符。通过ModelMBean为ModelMBean公开的属性和操作可以从MBeans、连接器/适配器等其他MBeans访问。通过描述符,可以定义和映射托管应用程序中的值和方法到ModelMBean的属性和操作。这种映射可以在XML格式文件中定义,也可以在运行时动态地以编程方式定义。

每个在MBeanServer中实例化的RequiredModelMBean都变得可管理:
其属性和操作通过连接到该MBeanServer的连接器/适配器变得远程可访问。

Java对象除非是符合JMX的MBean,否则无法在MBeanServer中注册。通过实例化RequiredModelMBean,资源可以确保MBean是有效的。每个公共方法必须抛出MBeanException和RuntimeOperationsException。这允许从分布式通信(RMI、EJB等)中包装异常。

自Java版本:
1.5
  • Constructor Details

  • Method Details

    • setModelMBeanInfo

      public void setModelMBeanInfo(ModelMBeanInfo mbi) throws MBeanException, RuntimeOperationsException
      使用传入的ModelMBeanInfo初始化ModelMBean对象。只要ModelMBean尚未注册到MBeanServer,就可以设置自定义的ModelMBeanInfo。
      一旦在ModelMBean上自定义并设置了ModelMBean的ModelMBeanInfo(带有描述符),就可以将ModelMBean注册到MBeanServer中。

      如果ModelMBean当前已注册,则此方法将抛出一个RuntimeOperationsException,其中包装了一个IllegalStateException

      如果给定的inModelMBeanInfo不包含任何GENERICATTRIBUTE_CHANGE通知的ModelMBeanNotificationInfo,则RequiredModelMBean将为这些缺失的通知提供自己的默认ModelMBeanNotificationInfo

      指定者:
      setModelMBeanInfo 在接口 ModelMBean
      参数:
      mbi - 要由ModelMBean使用的ModelMBeanInfo对象。
      抛出:
      MBeanException - 包装了分布式通信异常。
      RuntimeOperationsException -
    • setManagedResource

      设置对象的实例句柄,该对象用于执行此ModelMBean管理接口(MBeanInfo和描述符)中的所有方法。
      指定者:
      setManagedResource 在接口 ModelMBean
      参数:
      mr - 托管资源的对象
      mr_type - 托管资源的引用类型。
      可以是:"ObjectReference"、"Handle"、"IOR"、"EJBHandle"或"RMIReference"。
      在此实现中,仅支持"ObjectReference"。
      抛出:
      MBeanException - 对象的初始化程序引发了异常。
      InstanceNotFoundException - 无法找到托管资源对象
      InvalidTargetObjectTypeException - 托管资源类型应为"ObjectReference"。
      RuntimeOperationsException - 在设置资源时包装了一个RuntimeException
    • load

      使用在持久存储中找到的MBean数据实例化此MBean实例。加载的数据可能包括属性和操作值。

      应在构造或初始化此实例期间调用此方法,并在将MBean注册到MBeanServer之前调用。

      如果此类的实现不支持持久性,则会抛出包装了ServiceNotFoundExceptionMBeanException

      指定者:
      load 在接口 PersistentMBean
      抛出:
      MBeanException - 包装了另一个异常,或不支持持久性
      RuntimeOperationsException - 包装了持久性机制的异常
      InstanceNotFoundException - 无法找到或加载此MBean的持久存储
    • store

      捕获此MBean实例的当前状态并将其写入持久存储。存储的状态可能包括属性和操作值。

      如果此类的实现不支持持久性,则会抛出包装了ServiceNotFoundExceptionMBeanException

      来自MBean和属性描述符的持久性策略用于指导此方法的执行。如果'persistPolicy'字段为:

       != "never"
         = "always"
         = "onTimer" and now > 'lastPersistTime' + 'persistPeriod'
         = "NoMoreOftenThan" and now > 'lastPersistTime' + 'persistPeriod'
         = "onUnregister"
       

      如果'persistPolicy'字段为:

          = "never"
          = "onUpdate"
          = "onTimer" && now < 'lastPersistTime' + 'persistPeriod'
       

      则不存储MBean。

      指定者:
      store 在接口 PersistentMBean
      抛出:
      MBeanException - 包装了另一个异常,或不支持持久性
      RuntimeOperationsException - 包装了持久性机制的异常
      InstanceNotFoundException - 无法找到或访问持久存储
    • getMBeanInfo

      public MBeanInfo getMBeanInfo()
      返回此RequiredModelMBean为管理公开的属性、操作、构造函数和通知。
      指定者:
      getMBeanInfo 在接口 DynamicMBean
      返回:
      返回一个ModelMBeanInfo实例,允许检索此MBean的所有属性、操作和通知。
    • invoke

      public Object invoke(String opName, Object[] opArgs, String[] sig) throws MBeanException, ReflectionException
      调用RequiredModelMBean上的方法或通过其执行方法,并返回方法执行的结果。

      如果要调用的给定方法与提供的签名匹配RequiredModelMbean可访问的方法之一,则将调用该方法。否则,将尝试在托管资源上调用给定方法。

      操作返回的最后一个值可能会被缓存在操作描述符中,该描述符位于ModelMBeanOperationInfo的描述符中。如果描述符中的'currencyTimeLimit'字段为:

      • <0 那么该值不会被缓存且永远无效。将调用操作方法。如果没有'value'字段,则为属性调用操作方法。'value'和'lastUpdatedTimeStamp'字段将被清除。
      • =0 那么该值始终被缓存且始终有效。将返回'value'字段。如果没有'value'字段,则为属性调用操作方法。'lastUpdatedTimeStamp'字段和'value'字段将设置为操作的返回值和当前时间戳。
      • >0 表示'value'字段有效的秒数。当'lastUpdatedTimeStamp' + 'currencyTimeLimit' > 现在时,'value'字段将不再有效。
        • 当'value'有效时,将返回'value'。
        • 当'value'不再有效时,将调用操作方法。将更新'lastUpdatedTimeStamp'字段和'value'字段。

      注意:由于此规范先前版本中的不一致性,建议不要对currencyTimeLimit使用负值或零值。要指示缓存的值永远无效,请省略currencyTimeLimit字段。要指示它始终有效,请为此字段使用一个非常大的数字。

      指定者:
      invoke 在接口 DynamicMBean
      参数:
      opName - 要调用的方法的名称。名称可以是包括类名的完全限定方法名,或者如果类名在操作描述符的'class'字段中定义,则只是方法名。
      opArgs - 包含在调用操作时要设置的参数的数组
      sig - 包含操作的签名的数组。类对象将使用与调用操作的MBean相同的类加载器加载。
      返回:
      方法返回的对象,表示在指定托管资源上调用方法的结果。
      抛出:
      MBeanException - 包装以下异常之一:
      ReflectionException - 在尝试调用方法时包装了一个Exception
      RuntimeOperationsException - 包装了一个IllegalArgumentException 方法名为空。
    • getAttribute

      public Object getAttribute(String attrName) throws AttributeNotFoundException, MBeanException, ReflectionException
      返回为此ModelMBean定义的特定属性的值。属性的最后一个返回值可能会被缓存在属性的描述符中。如果存在'值'字段,则有效值将在其中。如果描述符中的'currencyTimeLimit'字段为:
      • <0 那么该值不会被缓存且永远无效。将调用属性的getter方法。'值'和'lastUpdatedTimeStamp'字段将被清除。
      • =0 那么该值始终被缓存且始终有效。将返回'值'字段。如果没有'值'字段,则将调用属性的getter方法。'lastUpdatedTimeStamp'字段和'值'字段将设置为属性的值和当前时间戳。
      • >0 表示'value'字段有效的秒数。当'lastUpdatedTimeStamp' + 'currencyTimeLimit' > 现在时,'值'字段将不再有效。
        • 当'value'有效时,将返回'value'。
        • 当'value'不再有效时,将调用属性的getter方法。将更新'lastUpdatedTimeStamp'字段和'值'字段。

      注意:由于此规范先前版本中的不一致性,建议不要对currencyTimeLimit使用负值或零值。要指示缓存的值永远无效,请省略currencyTimeLimit字段。要指示它始终有效,请为此字段使用一个非常大的数字。

      如果'getMethod'字段包含有效操作描述符的名称,则将执行操作描述符描述的方法。方法的响应将作为属性的值返回。如果操作失败或返回的值与属性声明的类型不兼容,则将抛出异常。

      如果未定义'getMethod'字段,则将返回属性的默认值。如果返回的值与属性声明的类型不兼容,则将抛出异常。

      属性的声明类型是由MBeanAttributeInfo.getType()返回的字符串。如果以下情况之一为真,则值与此类型兼容:

      • 值为null;
      • 声明的名称是原始类型名称(例如"int"),并且值是相应包装类型的实例(例如java.lang.Integer);
      • 值的类名称与声明的名称相同;
      • 声明的名称可以由值的类加载器加载,并且产生一个可以将值分配给的类。

      在此实现中,在需要调用getMethod的每种情况下,因为该方法是通过标准的“invoke”方法调用的,因此需要operationInfo,因此必须为该getMethod指定一个操作,以便调用正常工作。

      指定者:
      getAttribute 在接口 DynamicMBean
      参数:
      attrName - 指定要检索的属性的名称的字符串。它必须与ModelMBeanAttributeInfo的名称匹配。
      返回:
      从描述符的'value'字段或描述符的'getMethod'字段中的操作的调用中检索到的属性的值。
      抛出:
      AttributeNotFoundException - 无法访问指定的属性。以下情况可能导致AttributeNotFoundException:
      • 未找到ModelMBean的ModelMBeanInfo。
      • 未找到指定属性名称的ModelMBeanAttributeInfo。
      • ModelMBeanAttributeInfo的isReadable方法返回'false'。
      MBeanException - 封装以下异常之一:
      • InvalidAttributeValueException:从属性的getter方法接收到错误的值类型,或者描述符中未定义'getMethod'字段以及不存在默认值。
      • ServiceNotFoundException:未为属性的getter方法定义ModelMBeanOperationInfo,或者ModelMBeanOperationInfo没有关联的描述符,或者托管资源为null。
      • InvalidTargetObjectTypeException 'targetType'字段值不是'objectReference'。
      • 由托管对象的getter引发的异常。
      ReflectionException - 封装在尝试调用getter时引发的Exception
      RuntimeOperationsException - 封装一个IllegalArgumentException:参数中的属性名称为null。
      参见:
    • getAttributes

      public AttributeList getAttributes(String[] attrNames)
      返回ModelMBean中多个属性的值。对传入的attrNames数组中的每个属性名称执行getAttribute。
      指定者:
      getAttributes 在接口 DynamicMBean
      参数:
      attrNames - 要检索的属性名称的字符串数组。
      返回:
      检索到的属性数组。
      抛出:
      RuntimeOperationsException - 封装一个IllegalArgumentException:参数中的对象名称为null或参数中的属性为null。
      参见:
    • setAttribute

      设置命名ModelMBean的特定属性的值。如果属性的描述符的'setMethod'字段包含有效操作描述符的名称,则将执行操作描述符描述的方法。在此实现中,必须正确指定操作描述符并将其分配给modelMBeanInfo,以便'setMethod'正常工作。方法的响应将设置为描述符中属性的值。

      如果currencyTimeLimit > 0,则属性的新值将缓存在属性描述符的'value'字段中,并将'lastUpdatedTimeStamp'字段设置为当前时间戳。

      如果属性的描述符的persist字段不为null,则将使用属性描述符中的持久性策略来指导将属性存储在持久存储中。
      如果'persistPolicy'字段为以下情况之一,则存储MBean:

      • != "never"
      • = "always"
      • = "onUpdate"
      • = "onTimer" 并且现在 > 'lastPersistTime' + 'persistPeriod'
      • = "NoMoreOftenThan" 并且现在 > 'lastPersistTime' + 'persistPeriod'
      如果'persistPolicy'字段为以下情况之一,则不要存储MBean:
      • = "never"
      • = = "onTimer" && 现在 < 'lastPersistTime' + 'persistPeriod'
      • = "onUnregister"
      • = = "NoMoreOftenThan" 并且现在 < 'lastPersistTime' + 'persistPeriod'

      ModelMBean的ModelMBeanInfo存储在文件中。

      指定者:
      setAttribute 在接口 DynamicMBean
      参数:
      attribute - 包含要设置的属性名称和要设置的值的Attribute实例。
      抛出:
      AttributeNotFoundException - 无法访问指定的属性。
      以下情况可能导致AttributeNotFoundException:
      • 未找到指定属性的ModelMBeanAttributeInfo。
      • ModelMBeanAttributeInfo的isWritable方法返回'false'。
      InvalidAttributeValueException - 未为指定属性定义描述符。
      MBeanException - 封装以下异常之一:
      • 由托管对象的setter引发的异常。
      • 如果描述符中为属性定义了setMethod字段且托管资源为null;或者如果未定义setMethod字段且未启用属性的缓存。请注意,如果没有getMethod字段,则缓存会自动启用。
      • InvalidTargetObjectTypeException 'targetType'字段值不是'objectReference'。
      • 由托管对象的getter引发的异常。
      ReflectionException - 封装在尝试调用setter时引发的Exception
      RuntimeOperationsException - 封装一个IllegalArgumentException:参数中的属性为null。
      参见:
    • setAttributes

      public AttributeList setAttributes(AttributeList attributes)
      设置此ModelMBean的属性数组的值。对列表中的每个属性执行setAttribute()方法。
      指定者:
      setAttributes 在接口 DynamicMBean
      参数:
      attributes - 属性列表:要设置的属性的标识以及它们要设置的值。
      返回:
      已设置的属性数组,其中包含新值的Attribute实例。
      抛出:
      RuntimeOperationsException - 包装了一个IllegalArgumentException:参数中的对象名称为null或参数中的属性为null。
      参见:
    • addNotificationListener

      public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws IllegalArgumentException
      将实现NotificationListener接口的对象注册为监听器。当通过ModelMBean发出或发出任何通知时,将调用此对象的'handleNotification()'方法。这不包括属性更改通知。它们必须单独注册。
      指定者:
      addNotificationListener 在接口 NotificationBroadcaster
      参数:
      listener - 处理由注册的MBean发出的通知的监听器对象。
      filter - 过滤器对象。如果为null,则在处理通知之前不会执行任何过滤。
      handback - 发送到监听器的上下文,当发出通知时将与通知一起发送。
      抛出:
      IllegalArgumentException - 监听器不能为空。
      参见:
    • removeNotificationListener

      public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException
      从RequiredModelMBean中移除通知的监听器。
      指定者:
      removeNotificationListener 在接口 NotificationBroadcaster
      参数:
      listener - 处理注册的MBean发出的通知的监听器名称。此方法将删除与此监听器相关的所有信息。
      抛出:
      ListenerNotFoundException - 该监听器未在MBean中注册或为null。
      参见:
    • removeNotificationListener

      public void removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws ListenerNotFoundException
      从接口中复制的描述: NotificationEmitter

      从此MBean中移除一个监听器。MBean必须具有与给定的listenerfilterhandback参数完全匹配的监听器。如果存在多个这样的监听器,则只会移除一个。

      如果要移除的监听器中filterhandback参数为null,则这两个参数只能在要移除的监听器中为null。

      指定者:
      removeNotificationListener 在接口 NotificationEmitter
      参数:
      listener - 先前添加到此MBean中的监听器。
      filter - 在添加监听器时指定的过滤器。
      handback - 在添加监听器时指定的handback。
      抛出:
      ListenerNotFoundException - 该监听器未在MBean中注册,或者未使用给定的过滤器和handback注册。
    • sendNotification

      public void sendNotification(Notification ntfyObj) throws MBeanException, RuntimeOperationsException
      从接口中复制的描述: ModelMBeanNotificationBroadcaster
      将传入的通知作为jmx.modelmbean.generic通知发送到ModelMBean上注册的通知监听器。
      指定者:
      sendNotification 在接口 ModelMBeanNotificationBroadcaster
      参数:
      ntfyObj - 要传递给监听器对象的'handleNotification'方法的通知。
      抛出:
      MBeanException - 包装了一个分布式通信异常。
      RuntimeOperationsException - 包装了一个IllegalArgumentException:传入参数中的通知对象为null。
    • sendNotification

      public void sendNotification(String ntfyText) throws MBeanException, RuntimeOperationsException
      从接口中复制的描述: ModelMBeanNotificationBroadcaster
      将包含传入的文本字符串的通知作为jmx.modelmbean.generic通知发送到ModelMBean上注册的通知监听器。
      指定者:
      sendNotification 在接口 ModelMBeanNotificationBroadcaster
      参数:
      ntfyText - 要传递给监听器对象的'handleNotification'方法的文本。构造的通知将是:类型为"jmx.modelmbean.generic",源为此ModelMBean实例,序列为1。
      抛出:
      MBeanException - 包装了一个分布式通信异常。
      RuntimeOperationsException - 包装了一个IllegalArgumentException:传入参数中的通知文本字符串为null。
    • getNotificationInfo

      public MBeanNotificationInfo[] getNotificationInfo()
      返回始终由RequiredModelMBean生成的通知数组。

      RequiredModelMBean可能还会发送两个额外的通知:

      • 一个具有描述符"name=GENERIC,descriptorType=notification,log=T,severity=6,displayName=jmx.modelmbean.generic"
      • 第二个是具有描述符"name=ATTRIBUTE_CHANGE,descriptorType=notification,log=T,severity=6,displayName=jmx.attribute.change"的标准属性更改通知
      因此,这两个通知始终会添加到应用程序指定的通知中。
      指定者:
      getNotificationInfo 在接口 NotificationBroadcaster
      返回:
      MBeanNotificationInfo[]
    • addAttributeChangeNotificationListener

      public void addAttributeChangeNotificationListener(NotificationListener inlistener, String inAttributeName, Object inhandback) throws MBeanException, RuntimeOperationsException, IllegalArgumentException
      从接口中复制的描述: ModelMBeanNotificationBroadcaster
      将实现NotificationListener接口的对象注册为监听器。当通过ModelMBean发出或发出任何属性更改通知时,将调用此对象的'handleNotification()'方法。这不包括其他通知。它们必须单独注册。将为此attributeName生成一个AttributeChangeNotification。
      指定者:
      addAttributeChangeNotificationListener 在接口 ModelMBeanNotificationBroadcaster中指定
      参数:
      inlistener - 处理由注册的MBean发出的通知的监听器对象。
      inAttributeName - 要接收更改通知的ModelMBean属性的名称。如果为null,则所有属性更改都将导致发出属性更改通知。
      inhandback - 当发出通知时,要发送到监听器的上下文。
      抛出:
      MBeanException - 封装了分布式通信异常。
      RuntimeOperationsException - 封装了IllegalArgumentException:传递的属性名称不存在。
      IllegalArgumentException - 监听器不能为空。
      参见:
    • removeAttributeChangeNotificationListener

      public void removeAttributeChangeNotificationListener(NotificationListener inlistener, String inAttributeName) throws MBeanException, RuntimeOperationsException, ListenerNotFoundException
      从接口复制的描述: ModelMBeanNotificationBroadcaster
      从RequiredModelMBean中删除属性更改通知的监听器。
      指定者:
      removeAttributeChangeNotificationListener 在接口 ModelMBeanNotificationBroadcaster中指定
      参数:
      inlistener - 处理由注册的MBean发出的通知的监听器名称。此方法将删除与此监听器相关的所有信息。
      inAttributeName - 监听器不再希望接收属性更改通知的属性。如果为null,则监听器将从所有属性更改通知中删除。
      抛出:
      MBeanException - 封装了分布式通信异常。
      RuntimeOperationsException - 封装了IllegalArgumentException:如果inAttributeName参数不对应于属性名称。
      ListenerNotFoundException - 监听器未在MBean中注册或为null。
      参见:
    • sendAttributeChangeNotification

      public void sendAttributeChangeNotification(AttributeChangeNotification ntfyObj) throws MBeanException, RuntimeOperationsException
      从接口复制的描述: ModelMBeanNotificationBroadcaster
      将传入的attributeChangeNotification发送到ModelMBean上注册的attributeChangeNotification监听器。
      指定者:
      sendAttributeChangeNotification 在接口 ModelMBeanNotificationBroadcaster中指定
      参数:
      ntfyObj - 要传递给监听器对象的'handleNotification'方法的通知。
      抛出:
      MBeanException - 封装了分布式通信异常。
      RuntimeOperationsException - 封装了IllegalArgumentException:传递的AttributeChangeNotification对象为null。
    • sendAttributeChangeNotification

      public void sendAttributeChangeNotification(Attribute inOldVal, Attribute inNewVal) throws MBeanException, RuntimeOperationsException
      从接口复制的描述: ModelMBeanNotificationBroadcaster
      将包含属性的旧值和新值的attributeChangeNotification发送到ModelMBean上注册的AttributeChangeNotification监听器。
      指定者:
      sendAttributeChangeNotification 在接口 ModelMBeanNotificationBroadcaster中指定
      参数:
      inOldVal - 属性的原始值
      inNewVal - 属性的当前值
       构造的attributeChangeNotification将为:
         类型        "jmx.attribute.change"
         来源      此ModelMBean实例
         序列      1
         属性名称 oldValue.getName()
         属性类型 oldValue的类
         属性旧值 oldValue.getValue()
         属性新值 newValue.getValue()
       
      抛出:
      MBeanException - 封装了分布式通信异常。
      RuntimeOperationsException - 封装了IllegalArgumentException:传递的Attribute对象为null或参数中的两个Attribute对象的名称不相同。
    • getClassLoaderRepository

      protected ClassLoaderRepository getClassLoaderRepository()
      返回用于执行类加载的类加载器存储库。子类可能希望重新定义此方法,以返回应在此对象中使用的适当的ClassLoaderRepository
      返回:
      类加载器存储库。
    • preRegister

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

      为了确保RequireModelMBean的正确运行时语义,任何重载或覆盖此方法的RequiredModelMBean子类应在其自己的preRegister实现中调用super.preRegister(server, name)

      指定者:
      preRegister 在接口 MBeanRegistration中指定
      参数:
      server - 将注册MBean的MBean服务器。
      name - MBean的对象名称。如果在MBeanServer接口的createMBeanregisterMBean方法之一的name参数为null,则此名称为null。在这种情况下,此方法必须为新MBean返回一个非null的ObjectName。
      返回:
      要注册MBean的名称。此值不能为空。如果name参数不为null,则通常但不一定是返回值。
      抛出:
      Exception - 此异常将被MBean服务器捕获并重新抛出为MBeanRegistrationException
    • postRegister

      public void postRegister(Boolean registrationDone)
      允许MBean在已在MBean服务器中注册后或注册失败后执行所需的任何操作。

      为了确保RequireModelMBean的正确运行时语义,任何重载或覆盖此方法的RequiredModelMBean子类应在其自己的postRegister实现中调用super.postRegister(registrationDone)

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

      public void preDeregister() throws Exception
      允许MBean在MBean服务器取消注册之前执行其需要的任何操作。

      为了确保RequireModelMBean的正确运行时语义,任何重载或覆盖此方法的RequiredModelMBean子类应在其自己的preDeregister实现中调用super.preDeregister()

      指定者:
      preDeregister 在接口 MBeanRegistration
      抛出:
      Exception - 此异常将被MBean服务器捕获并重新抛出为一个MBeanRegistrationException
    • postDeregister

      public void postDeregister()
      允许MBean在从MBean服务器中注销后执行任何所需操作。

      为了确保RequireModelMBean的正确运行时语义,任何重载或覆盖此方法的RequiredModelMBean子类应在其自己的postDeregister实现中调用super.postDeregister()

      指定者:
      postDeregister 在接口 MBeanRegistration