模块  java.management

Class RequiredModelMBean

  • 实现的所有接口
    DynamicMBeanMBeanRegistrationModelMBeanModelMBeanNotificationBroadcasterNotificationBroadcasterNotificationEmitterPersistentMBean

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

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

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

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

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

      • store

        public void store()
                   throws MBeanException,
                          RuntimeOperationsException,
                          InstanceNotFoundException

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

        如果此类的实现不支持持久性,则抛出MBeanException包装ServiceNotFoundException

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

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

        如果'persistPolicy'字段为:不存储MBean:

          = "never"
            = "onUpdate"
            = "onTimer" && now < 'lastPersistTime' + 'persistPeriod' 
        Specified by:
        store在界面 PersistentMBean
        异常
        MBeanException - 包装另一个异常,或者不支持持久性
        RuntimeOperationsException - 包含持久性机制中的异常
        InstanceNotFoundException - 无法找到/访问持久性存储
      • getMBeanInfo

        public MBeanInfo getMBeanInfo()
        返回此RequiredModelMBean为管理公开的属性,操作,构造函数和通知。
        Specified by:
        getMBeanInfo在界面 DynamicMBean
        结果
        ModelMBeanInfo的一个实例,允许检索此MBean的所有属性,操作和通知。
      • invoke

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

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

        操作返回的最后一个值可以缓存在ModelMBeanOperationInfo描述符中的操作描述符中。 如果存在,则有效值将位于“值”字段中。 如果描述符中的'currencyTimeLimit'字段是:

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

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

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

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

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

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

        如果未定义“getMethod”字段,则返回该属性的默认值。 如果返回的值与声明的属性类型不兼容,则将引发异常。

        声明的属性类型是由MBeanAttributeInfo.getType()返回的字符串 如果满足以下条件之一,则值与此类型兼容:

        • 值为null;
        • 声明的名称是基本类型名称(例如“int”),值是相应包装器类型的实例(例如java.lang.Integer);
        • 值类的名称与声明的名称相同;
        • 声明的名称可以由值的类加载器加载,并生成一个可以赋值的类。

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

        Specified by:
        getAttribute在界面 DynamicMBean
        参数
        attrName - 指定要检索的属性名称的String。 它必须与ModelMBeanAttributeInfo的名称匹配。
        结果
        从描述符'value'字段中检索的属性的值,或者从描述符的'getMethod'字段中的操作的调用中获取的值。
        异常
        AttributeNotFoundException - MBean中无法访问指定的属性。 以下情况可能导致AttributeNotFoundException:
        • 未找到Model MBean的ModelMBeanInfo。
        • 未找到指定属性名称的ModelMBeanAttributeInfo。
        • ModelMBeanAttributeInfo isReadable方法返回'false'。
        MBeanException - 包装以下例外之一:
        ReflectionException - 在尝试调用getter时将一个异常包裹起来
        RuntimeOperationsException - 包装IllegalArgumentException :参数中的属性名称为null。
        另请参见:
        setAttribute(javax.management.Attribute)
      • setAttribute

        public void setAttribute​(Attribute attribute)
                          throws AttributeNotFoundException,
                                 InvalidAttributeValueException,
                                 MBeanException,
                                 ReflectionException
        设置命名ModelMBean的特定属性的值。 如果属性描述符的'setMethod'字段包含有效操作描述符的名称,则执行操作描述符描述的方法。 在此实现中,必须正确指定操作描述符并将其分配给modelMBeanInfo,以便'setMethod'正常工作。 该方法的响应被设置为描述符中属性的值。

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

        如果属性描述符的持久字段不为空,则使用属性描述符中的持久性策略来指导将属性存储在持久性存储中。
        如果'persistPolicy'字段为:存储MBean:

        • !=“从不”
        • =“总是”
        • =“onUpdate”
        • =“onTimer”和now>'lastPersistTime'+'persistPeriod'
        • =“NoMoreOftenThan”和now>'lastPersistTime'+'persistPeriod'
        如果'persistPolicy'字段为:不存储MBean:
        • =“从不”
        • = =“onTimer”&& now <'lastPersistTime'+'persistPeriod'
        • =“onUnregister”
        • = =“NoMoreOftenThan”,现在<'lastPersistTime'+'persistPeriod'

        Model MBean的ModelMBeanInfo存储在一个文件中。

        Specified by:
        setAttribute在界面 DynamicMBean
        参数
        attribute - 包含要设置的属性名称及其要设置的值的Attribute实例。
        异常
        AttributeNotFoundException - MBean中无法访问指定的属性。
        以下情况可能导致AttributeNotFoundException:
        • 未找到指定属性的ModelMBeanAttributeInfo。
        • ModelMBeanAttributeInfo的isWritable方法返回'false'。
        InvalidAttributeValueException - 未为指定的属性定义描述符。
        MBeanException - 包装以下例外之一:
        • 托管对象的setter抛出的异常。
        • 如果在属性的描述符中定义了setMethod字段且托管资源为null, 则为ServiceNotFoundException ; 或者,如果未定义setMethod字段,则不为该属性启用缓存。 请注意,如果没有getMethod字段,则会自动启用缓存。
        • InvalidTargetObjectTypeException'targetType '字段值不是'objectReference'。
        • 托管对象的getter抛出的异常。
        ReflectionException - 尝试调用setter时抛出异常
        RuntimeOperationsException - 包装IllegalArgumentException :参数中的属性为null。
        另请参见:
        getAttribute(java.lang.String)
      • 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"的标准属性更改通知
        因此,这两个通知始终添加到应用程序指定的通知中。
        Specified by:
        getNotificationInfo在界面 NotificationBroadcaster
        结果
        的MBeanNotificationInfo []
      • getClassLoaderRepository

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

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

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

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

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

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

        Specified by:
        postRegister在界面 MBeanRegistration
        参数
        registrationDone - 指示MBean是否已在MBean服务器中成功注册。 值false表示注册阶段已失败。
      • preDeregister

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

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

        Specified by:
        preDeregister在界面 MBeanRegistration
        异常
        异常 - 此异常将被MBean服务器捕获并重新抛出为MBeanRegistrationException
      • postDeregister

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

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

        Specified by:
        postDeregister在界面 MBeanRegistration