- 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和Descriptors。 可以从MBean,连接器/适配器(如其他MBean)访问通过ModelMBean的ModelMBeanInfo公开的属性和操作。 通过描述符,可以定义托管应用程序中的值和方法,并将其映射到ModelMBean的属性和操作。 此映射可以在XML格式的文件中定义,也可以在运行时以动态和编程方式定义。
在MBeanServer中实例化的每个RequiredModelMBean都变得易于管理:
其属性和操作可通过连接到该MBeanServer的连接器/适配器远程访问。除非符合JMX的MBean,否则无法在MBeanServer中注册Java对象。 通过实例化RequiredModelMBean,可以保证MBean有效。 必须在每个公共方法上抛出MBeanException和RuntimeOperationsException。 这允许从分布式通信(RMI,EJB等)中包装异常
- 从以下版本开始:
- 1.5
-
-
构造方法摘要
构造方法 构造器 描述 RequiredModelMBean()
使用空的ModelMBeanInfo构造一个RequiredModelMBean
。RequiredModelMBean(ModelMBeanInfo mbi)
使用传入的ModelMBeanInfo构造一个RequiredModelMBean对象。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 void
addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback)
将实现NotificationListener接口的对象注册为侦听器。Object
getAttribute(String attrName)
返回为此ModelMBean定义的特定属性的值。AttributeList
getAttributes(String[] attrNames)
返回ModelMBean中多个属性的值。protected ClassLoaderRepository
getClassLoaderRepository()
返回用于执行类加载的类加载器存储库。MBeanInfo
getMBeanInfo()
返回此RequiredModelMBean为管理公开的属性,操作,构造函数和通知。MBeanNotificationInfo[]
getNotificationInfo()
返回RequiredModelMBean始终生成的通知数组。Object
invoke(String opName, Object[] opArgs, String[] sig)
在RequiredModelMBean上或通过RequiredModelMBean调用方法,并返回方法执行的结果。void
load()
使用为持久性存储中的MBean找到的数据实例化此MBean实例。void
postDeregister()
允许MBean在MBean服务器中取消注册后执行所需的任何操作。void
postRegister(Boolean registrationDone)
允许MBean在MBean服务器中注册后或注册失败后执行所需的任何操作。void
preDeregister()
允许MBean在MBean服务器取消注册之前执行所需的任何操作。ObjectName
preRegister(MBeanServer server, ObjectName name)
允许MBean在MBean服务器中注册之前执行所需的任何操作。void
removeNotificationListener(NotificationListener listener)
从RequiredModelMBean中删除Notifications的侦听器。void
setAttribute(Attribute attribute)
设置命名ModelMBean的特定属性的值。AttributeList
setAttributes(AttributeList attributes)
设置此ModelMBean的属性数组的值。void
setManagedResource(Object mr, String mr_type)
设置对象的实例句柄,以便在此ModelMBean管理接口(MBeanInfo和Descriptors)中执行所有方法。void
setModelMBeanInfo(ModelMBeanInfo mbi)
使用传入的ModelMBeanInfo初始化ModelMBean对象。void
store()
捕获此MBean实例的当前状态并将其写入持久性存储。-
声明方法的类 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
声明方法的接口 javax.management.modelmbean.ModelMBeanNotificationBroadcaster
addAttributeChangeNotificationListener, removeAttributeChangeNotificationListener, sendAttributeChangeNotification, sendAttributeChangeNotification, sendNotification, sendNotification
-
声明方法的接口 javax.management.NotificationEmitter
removeNotificationListener
-
-
-
-
构造方法详细信息
-
RequiredModelMBean
public RequiredModelMBean() throws MBeanException, RuntimeOperationsException
使用空的ModelMBeanInfo构造一个RequiredModelMBean
。可以使用
setModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo)
方法自定义RequiredModelMBean的MBeanInfo和Descriptors。 在自定义RequiredModelMBean的MBeanInfo和Descriptors之后,可以向MBeanServer注册RequiredModelMBean。- 异常
-
MBeanException
- 包装分布式通信异常。 -
RuntimeOperationsException
- 在构造对象期间包裹RuntimeException
。
-
RequiredModelMBean
public RequiredModelMBean(ModelMBeanInfo mbi) throws MBeanException, RuntimeOperationsException
使用传入的ModelMBeanInfo构造一个RequiredModelMBean对象。只要还没有向MBeanServer注册RequiredModelMBean,就可以使用setModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo)
方法自定义RequiredModelMBean的MBeanInfo和Descriptors。 在自定义RequiredModelMBean的MBeanInfo和Descriptors之后,可以向MBeanServer注册RequiredModelMBean。- 参数
-
mbi
- RequiredModelMBean要使用的ModelMBeanInfo对象。 按照setModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo)
的规定克隆和修改给定的ModelMBeanInfo - 异常
-
MBeanException
- 包装分布式通信异常。 -
RuntimeOperationsException
- 包装{link java.lang.IllegalArgumentException}:传入参数的MBeanInfo为null。
-
-
方法详细信息
-
setModelMBeanInfo
public void setModelMBeanInfo(ModelMBeanInfo mbi) throws MBeanException, RuntimeOperationsException
使用传入的ModelMBeanInfo初始化ModelMBean对象。只要没有向MBeanServer注册,此方法就可以在ModelMBean上设置自定义的ModelMBeanInfo。
一旦ModelMBean的ModelMBeanInfo(带有描述符)被自定义并在ModelMBean上设置,ModelMBean就会被注册到MBeanServer。如果ModelMBean当前已注册,则此方法将引发
RuntimeOperationsException
包装IllegalStateException
如果给定的inModelMBeanInfo不包含
GENERIC
或ATTRIBUTE_CHANGE
通知的任何ModelMBeanNotificationInfo
,则RequiredModelMBean将为缺少的通知提供其自己的默认值ModelMBeanNotificationInfo
。- Specified by:
-
setModelMBeanInfo
in interfaceModelMBean
- 参数
-
mbi
- ModelMBean要使用的ModelMBeanInfo对象。 - 异常
-
MBeanException
- 包装分布式通信异常。 -
RuntimeOperationsException
-- 如果传入参数的MBeanInfo为null,则包含
IllegalArgumentException
。 - 如果ModelMBean当前在MBeanServer中注册,则包含
IllegalStateException
。
- 如果传入参数的MBeanInfo为null,则包含
-
setManagedResource
public void setManagedResource(Object mr, String mr_type) throws MBeanException, RuntimeOperationsException, InstanceNotFoundException, InvalidTargetObjectTypeException
设置对象的实例句柄,以便在此ModelMBean管理接口(MBeanInfo和Descriptors)中执行所有方法。- Specified by:
-
setManagedResource
在界面ModelMBean
- 参数
-
mr
- 作为受管资源的对象 -
mr_type
- 受管资源的引用类型。
可以是:“ObjectReference”,“Handle”,“IOR”,“EJBHandle”或“RMIReference”。
在此实现中,仅支持“ObjectReference”。 - 异常
-
MBeanException
- 对象的初始值设定项引发了异常。 -
InstanceNotFoundException
- 找不到托管资源对象 -
InvalidTargetObjectTypeException
- 受管资源类型应为“ObjectReference”。 -
RuntimeOperationsException
- 设置资源时包含RuntimeException
。
-
load
public void load() throws MBeanException, RuntimeOperationsException, InstanceNotFoundException
使用为持久性存储中的MBean找到的数据实例化此MBean实例。 加载的数据可以包括属性和操作值。
应在构造或初始化此实例期间以及向MBeanServer注册MBean之前调用此方法。
如果此类的实现不支持持久性,则抛出
MBeanException
包装ServiceNotFoundException
。- Specified by:
-
load
在界面PersistentMBean
- 异常
-
MBeanException
- 包装另一个异常,或者不支持持久性 -
RuntimeOperationsException
- 包含持久性机制中的异常 -
InstanceNotFoundException
- 无法从持久存储中查找或加载此MBean
-
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
- 包装以下例外之一:- 托管对象的调用方法抛出的异常。
-
ServiceNotFoundException
:没有ModelMBeanOperationInfo或没有为指定的操作定义的描述符或受管资源为null。 -
InvalidTargetObjectTypeException
:'targetType'字段值不是'objectReference'。
-
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
- 包装以下例外之一:-
InvalidAttributeValueException
:从属性的getter方法接收到错误的值类型,或者在属性的描述符中没有定义“getMethod”字段,并且不存在默认值。 -
ServiceNotFoundException
:没有为属性的getter方法定义ModelMBeanOperationInfo,或者没有与ModelMBeanOperationInfo关联的描述符或托管资源为null。 -
InvalidTargetObjectTypeException
'targetType '字段值不是'objectReference'。 - 托管对象的getter抛出的异常。
-
-
ReflectionException
- 在尝试调用getter时将一个异常
包裹起来 。 -
RuntimeOperationsException
- 包装IllegalArgumentException
:参数中的属性名称为null。 - 另请参见:
-
setAttribute(javax.management.Attribute)
-
getAttributes
public AttributeList getAttributes(String[] attrNames)
返回ModelMBean中多个属性的值。 为传入的attrNames数组中的每个属性名执行getAttribute。- Specified by:
-
getAttributes
在界面DynamicMBean
- 参数
-
attrNames
- 要检索的属性的字符串数组。 - 结果
- 检索到的属性的数组。
- 异常
-
RuntimeOperationsException
- 包装IllegalArgumentException
:参数中的对象名称为null或参数中的属性为null。 - 另请参见:
-
setAttributes(javax.management.AttributeList)
-
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'
- =“从不”
- = =“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)
-
setAttributes
public AttributeList setAttributes(AttributeList attributes)
设置此ModelMBean的属性数组的值。 为列表中的每个属性执行setAttribute()方法。- Specified by:
-
setAttributes
in interfaceDynamicMBean
- 参数
-
attributes
- 属性列表:要设置的属性的标识以及要设置的值。 - 结果
- 已设置的属性数组及其在Attribute实例中的新值。
- 异常
-
RuntimeOperationsException
- 包装IllegalArgumentException
:参数中的对象名称为null或参数中的属性为null。 - 另请参见:
-
getAttributes(java.lang.String[])
-
addNotificationListener
public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws IllegalArgumentException
将实现NotificationListener接口的对象注册为侦听器。 当通过ModelMBean发出或通过ModelMBean发出任何通知时,将调用此对象的'handleNotification()'方法。 这不包括attributeChangeNotifications。 他们必须独立注册。- Specified by:
-
addNotificationListener
接口NotificationBroadcaster
- 参数
-
listener
- 将处理已注册MBean发出的通知的侦听器对象。 -
filter
- 过滤器对象。 如果为null,则在处理通知之前不会执行任何过滤。 -
handback
- 发出通知时通知发送给侦听器的上下文。 - 异常
-
IllegalArgumentException
- 侦听器不能为空。 - 另请参见:
-
removeNotificationListener(javax.management.NotificationListener)
-
removeNotificationListener
public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException
从RequiredModelMBean中删除Notifications的侦听器。- Specified by:
-
removeNotificationListener
在界面NotificationBroadcaster
- 参数
-
listener
- 处理已注册MBean发出的通知的侦听器名称。 此方法将删除与此侦听器相关的所有信息。 - 异常
-
ListenerNotFoundException
- 侦听器未在MBean中注册或为null。 - 另请参见:
-
addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
-
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
接口中createMBean
或registerMBean
方法之一的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
-
-