public class RequiredModelMBean extends Object implements ModelMBean, MBeanRegistration, NotificationEmitter
希望可管理的Java资源使用MBeanServer的createMBean方法实例化RequiredModelMBean。 资源然后设置RequiredModelMBean实例的MBeanInfo和Descriptors。 通过ModelMBeanInfo为ModelMBean公开的属性和操作可以从MBean,连接器/适配器(如其他MBean)访问。 通过描述符,可以将托管应用程序中的值和方法定义并映射到ModelMBean的属性和操作。 该映射可以在XML格式的文件中定义,也可以在运行时以动态和编程方式定义。
在MBeanServer中实例化的每个RequiredModelMBean变得可管理:
其属性和操作可以通过连接到该MBeanServer的连接器/适配器进行远程访问。
除非是符合JMX的MBean,否则不能在MBeanServer中注册Java对象。 通过实例化一个RequiredModelMBean,保证MBean有效的资源。 必须在每个公共方法上抛出MBeanException和RuntimeOperationsException。 这允许从分布式通信(RMI,EJB等)中包装异常
Constructor and Description |
---|
RequiredModelMBean()
构造一个
RequiredModelMBean 一个空的ModelMBeanInfo。
|
RequiredModelMBean(ModelMBeanInfo mbi)
使用传入的ModelMBeanInfo构造一个RequiredModelMBean对象。
|
Modifier and Type | Method and Description |
---|---|
void |
addAttributeChangeNotificationListener(NotificationListener inlistener, String inAttributeName, Object inhandback)
注册一个实现NotificationListener接口的对象作为监听器。
|
void |
addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback)
注册一个实现NotificationListener接口的对象作为监听器。
|
Object |
getAttribute(String attrName)
返回为此ModelMBean定义的特定属性的值。
|
AttributeList |
getAttributes(String[] attrNames)
返回ModelMBean中的几个属性的值。
|
protected ClassLoaderRepository |
getClassLoaderRepository()
返回用于执行类加载的Class Loader Repository。
|
MBeanInfo |
getMBeanInfo()
返回此RequiredModelMBean所管理的属性,操作,构造函数和通知。
|
MBeanNotificationInfo[] |
getNotificationInfo()
返回始终由RequiredModelMBean生成的通知数组。
|
Object |
invoke(String opName, Object[] opArgs, String[] sig)
通过或者通过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 |
removeAttributeChangeNotificationListener(NotificationListener inlistener, String inAttributeName)
从RequiredModelMBean中删除attributeChangeNotifications的侦听器。
|
void |
removeNotificationListener(NotificationListener listener)
从RequiredModelMBean中删除通知的侦听器。
|
void |
removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback)
从这个MBean中删除一个监听器。
|
void |
sendAttributeChangeNotification(Attribute inOldVal, Attribute inNewVal)
发送一个attributeChangeNotification,其中包含该属性的旧值和新值到ModelMBean上注册的AttributeChangeNotification侦听器。
|
void |
sendAttributeChangeNotification(AttributeChangeNotification ntfyObj)
发送一个attributeChangeNotification,该属性传递给ModelMBean上注册的attributeChangeNotification侦听器。
|
void |
sendNotification(Notification ntfyObj)
发送通知,该通知将作为jmx.modelmbean.generic通知传递给ModelMBean上的注册通知侦听器。
|
void |
sendNotification(String ntfyText)
发送一个通知,其中包含传递给ModelMBean上注册的通知侦听器的文本字符串。
|
void |
setAttribute(Attribute attribute)
设置命名的ModelMBean的特定属性的值。
|
AttributeList |
setAttributes(AttributeList attributes)
设置此ModelBean的属性数组的值。
|
void |
setManagedResource(Object mr, String mr_type)
设置要在此ModelMBean管理界面(MBeanInfo和Descriptors)中执行所有方法的对象的实例句柄。
|
void |
setModelMBeanInfo(ModelMBeanInfo mbi)
使用传入的ModelMBeanInfo初始化一个ModelMBean对象。
|
void |
store()
捕获此MBean实例的当前状态并将其写入持久存储。
|
public RequiredModelMBean() throws MBeanException, RuntimeOperationsException
RequiredModelMBean
一个空的ModelMBeanInfo。
RequiredModelMBean的MBeanInfo和Descriptors可以使用setModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo)
方法进行自定义 。 在RequiredModelMBean的MBeanInfo和Descriptors被自定义之后,RequiredModelMBean可以向MBeanServer注册。
MBeanException
- 包装分布式通信异常。
RuntimeOperationsException
- 在构建对象期间包裹RuntimeException
。
public RequiredModelMBean(ModelMBeanInfo mbi) throws MBeanException, RuntimeOperationsException
setModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo)
方法自定义RequiredModelMBean的MBeanInfo和Descriptors。
在RequiredModelMBean的MBeanInfo和Descriptors被自定义之后,RequiredModelMBean可以向MBeanServer注册。
mbi
- RequiredModelMBean要使用的ModelMBeanInfo对象。
给定的ModelMBeanInfo被克隆和修饰如通过指定setModelMBeanInfo(javax.management.modelmbean.ModelMBeanInfo)
MBeanException
- 包裹分布式通信异常。
RuntimeOperationsException
- 包装{link java.lang.IllegalArgumentException}:传入参数的MBeanInfo为null。
public void setModelMBeanInfo(ModelMBeanInfo mbi) throws MBeanException, RuntimeOperationsException
如果ModelMBean当前已注册,此方法会引发RuntimeOperationsException
包装IllegalStateException
如果给定inModelMBeanInfo不包含任何ModelMBeanNotificationInfo
为GENERIC
或ATTRIBUTE_CHANGE
通知,则RequiredModelMBean将提供自己的默认ModelMBeanNotificationInfo
个 S表示这些失踪的通知。
setModelMBeanInfo
在界面
ModelMBean
mbi
- ModelMBean要使用的ModelMBeanInfo对象。
MBeanException
- 包装分布式通信异常。
RuntimeOperationsException
-
IllegalArgumentException
。 IllegalStateException
如果了ModelMBean MBeanServer中注册。 public void setManagedResource(Object mr, String mr_type) throws MBeanException, RuntimeOperationsException, InstanceNotFoundException, InvalidTargetObjectTypeException
setManagedResource
在界面
ModelMBean
mr
- 被管理资源的对象
mr_type
- 受管资源的引用类型。
MBeanException
- 对象的初始化器抛出异常。
InstanceNotFoundException
- 找不到托管资源对象
InvalidTargetObjectTypeException
- 受管资源类型应为“ObjectReference”。
RuntimeOperationsException
- 设置资源时封装RuntimeException
。
public void load() throws MBeanException, RuntimeOperationsException, InstanceNotFoundException
使用在永久存储中找到的MBean数据来实例化此MBean实例。 加载的数据可以包括属性和操作值。
在此实例的构建或初始化期间,以及在MBean注册到MBeanServer之前,应该调用此方法。
如果这个类的实现不支持持久性,则抛出一个MBeanException
包装ServiceNotFoundException
。
load
在接口
PersistentMBean
MBeanException
- 包装另一个异常,或不支持持久性
RuntimeOperationsException
- 从持久化机制包装异常
InstanceNotFoundException
- 无法从永久存储中找到或加载该MBean
public void store() throws MBeanException, RuntimeOperationsException, InstanceNotFoundException
捕获此MBean实例的当前状态并将其写入持久存储。 存储的状态可以包括属性和操作值。
如果此类的实现不支持持久性,则会抛出一个ServiceNotFoundException
包装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'
store
在界面
PersistentMBean
MBeanException
- 包装另一个异常,或不支持持久性
RuntimeOperationsException
- 从持久化机制包装异常
InstanceNotFoundException
- 找不到/访问持久存储
public MBeanInfo getMBeanInfo()
getMBeanInfo
在界面
DynamicMBean
public Object invoke(String opName, Object[] opArgs, String[] sig) throws MBeanException, ReflectionException
如果要调用的给定方法与所提供的签名一起匹配RequiredModelMbean可访问方法之一,则将调用该方法。 否则,将对被管理的资源进行对给定方法的调用。
操作返回的最后一个值可以缓存在ModelMBeanOperationInfo描述符中的操作描述符中。 有效值将在“值”字段中,如果有的话。 如果描述符中的'currencyTimeLimit'字段是:
注:由于与此规范的以前版本不一致,建议不要使用负值或零值currencyTimeLimit
。 要指示缓存值永远无效,请省略currencyTimeLimit
字段。 要指示它始终有效,请为此字段使用非常大的数字。
invoke
在界面
DynamicMBean
opName
- 要调用的方法的名称。
如果在操作描述符的'class'字段中定义了类名称,则该名称可以是包含类名称的完全限定方法名称,也可以是方法名称。
opArgs
- 包含调用操作时要设置的参数的数组
sig
- 包含操作签名的数组。
将使用与用于加载调用操作的MBean相同的类加载器来加载类对象。
MBeanException
- 包装以下其中一个异常:
ServiceNotFoundException
:否ModelMBeanOperationInfo或没有为指定的操作定义的描述符或被管理的资源为空。 InvalidTargetObjectTypeException
:'targetType'字段值不是'objectReference'。 ReflectionException
- 在尝试调用该方法时抛出一个异常
。
RuntimeOperationsException
- 包装IllegalArgumentException
方法名称为null。
public Object getAttribute(String attrName) throws AttributeNotFoundException, MBeanException, ReflectionException
注:由于与此规范的以前版本不一致,建议不要使用负值或零值currencyTimeLimit
。 要指示缓存值永远无效,请省略currencyTimeLimit
字段。 要指示它始终有效,请为此字段使用非常大的数字。
如果“getMethod”字段包含有效的操作描述符的名称,则执行操作描述符描述的方法。 该方法的响应作为属性的值返回。 如果操作失败或返回的值与声明的属性类型不兼容,将抛出异常。
如果没有定义“getMethod”字段,则返回属性的默认值。 如果返回的值与声明的属性类型不兼容,将抛出异常。
属性声明的类型是返回的字符串MBeanAttributeInfo.getType()
。 如果满足以下条件之一,则该值与此类型兼容:
在这个实现中,在需要调用getMethod的每一种情况下,由于通过标准的“invoke”方法调用该方法,因此需要使用operationInfo,因此必须为该getMethod指定一个操作,以便调用工作正常。
getAttribute
在界面
DynamicMBean
attrName
- 指定要检索的属性的名称的字符串。
它必须匹配ModelMBeanAttributeInfo的名称。
AttributeNotFoundException
- MBean中无法访问指定的属性。
以下情况可能会导致AttributeNotFoundException:
MBeanException
- 包装以下其中一个异常:
InvalidAttributeValueException
:从属性的getter方法接收到错误的值类型,或者在属性描述符中定义的“getMethod”字段不存在缺省值。 ServiceNotFoundException
:没有为属性的getter方法定义的ModelMBeanOperationInfo或与ModelMBeanOperationInfo或被管理资源关联的描述符为null。 InvalidTargetObjectTypeException
'targetType '字段值不是'objectReference'。 ReflectionException
- 包裹一个异常
在尝试调用吸气剂时抛出。
RuntimeOperationsException
- 包装IllegalArgumentException
:参数中的属性名称为空。
setAttribute(javax.management.Attribute)
public AttributeList getAttributes(String[] attrNames)
getAttributes
在界面
DynamicMBean
attrNames
- 要检索的属性名称的String数组。
RuntimeOperationsException
- 包装IllegalArgumentException
:参数中的对象名称为null或参数中的属性为空。
setAttributes(javax.management.AttributeList)
public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException
如果currencyTimeLimit> 0,则属性描述符的'value'字段中缓存属性的新值,并将'lastUpdatedTimeStamp'字段设置为当前时间戳。
如果属性描述符的持久字段不为空,则使用属性描述符的持久性策略来指导将属性存储在持久存储中。
如果'persistPolicy'字段是存储MBean:
模型MBean的ModelMBeanInfo存储在一个文件中。
setAttribute
在界面
DynamicMBean
attribute
- 包含要设置的属性的名称和要设置的值的属性实例。
AttributeNotFoundException
- MBean中无法访问指定的属性。
InvalidAttributeValueException
- 没有为指定的属性定义描述符。
MBeanException
- 包装以下其中一个异常:
ServiceNotFoundException
如果setMethod字段在属性的描述符中定义,并且被管理资源为null; 或者如果没有定义setMethod字段,并且没有为该属性启用缓存。 请注意,如果没有getMethod字段,则会自动启用缓存。 InvalidTargetObjectTypeException
'targetType '字段值不是'objectReference'。 ReflectionException
- 在尝试调用设置器时抛出一个异常
。
RuntimeOperationsException
- 包装IllegalArgumentException
:参数中的属性为null。
getAttribute(java.lang.String)
public AttributeList setAttributes(AttributeList attributes)
setAttributes
在接口
DynamicMBean
attributes
- 属性列表:要设置的属性的标识以及要设置的属性值。
RuntimeOperationsException
- 包装IllegalArgumentException
:参数中的对象名称为null或参数中的属性为空。
getAttributes(java.lang.String[])
public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws IllegalArgumentException
addNotificationListener
在界面
NotificationBroadcaster
listener
- 将处理注册MBean发出的通知的侦听器对象。
filter
- 过滤器对象。
如果为空,则在处理通知之前不会执行过滤。
handback
- 发送通知时发送给侦听器的上下文通知。
IllegalArgumentException
- 侦听器不能为空。
removeNotificationListener(javax.management.NotificationListener)
public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException
removeNotificationListener
在界面
NotificationBroadcaster
listener
- 处理由注册MBean发出的通知的侦听器名称。
此方法将删除与此侦听器相关的所有信息。
ListenerNotFoundException
- 监听器未在MBean中注册或为空。
addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
public void removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws ListenerNotFoundException
NotificationEmitter
复制
从这个MBean中删除一个监听器。 该MBean必须有一个与给定匹配的侦听listener
, filter
和handback
参数。 如果有多个这样的听众,只有一个被删除。
filter
和handback
参数当且仅当在要删除的侦听器中为空时才可以为空。
removeNotificationListener
在界面
NotificationEmitter
listener
- 以前添加到此MBean的侦听器。
filter
- 添加侦听器时指定的过滤器。
handback
- 添加侦听器时指定的回调。
ListenerNotFoundException
- 监听器未注册到MBean,或者没有向给定的过滤器和回传注册。
public void sendNotification(Notification ntfyObj) throws MBeanException, RuntimeOperationsException
ModelMBeanNotificationBroadcaster
复制
sendNotification
在界面
ModelMBeanNotificationBroadcaster
ntfyObj
- 要传递给侦听器对象的“handleNotification”方法的通知。
MBeanException
- 包裹分布式通信异常。
RuntimeOperationsException
- 包裹一个IllegalArgumentException:在参数中传递的Notification对象为null。
public void sendNotification(String ntfyText) throws MBeanException, RuntimeOperationsException
ModelMBeanNotificationBroadcaster
复制
sendNotification
在界面
ModelMBeanNotificationBroadcaster
ntfyText
- 要在通知中传递给侦听器对象的“handleNotification”方法的文本。
构造的通知将是:键入“jmx.modelmbean.generic”源此ModelMBean实例序列1
MBeanException
- 包裹分布式通信异常。
RuntimeOperationsException
- 包裹一个IllegalArgumentException:参数中传递的Notification文本字符串为null。
public MBeanNotificationInfo[] getNotificationInfo()
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"
的标准属性更改"name=ATTRIBUTE_CHANGE,descriptorType=notification,log=T,severity=6,displayName=jmx.attribute.change"
getNotificationInfo
在界面
NotificationBroadcaster
public void addAttributeChangeNotificationListener(NotificationListener inlistener, String inAttributeName, Object inhandback) throws MBeanException, RuntimeOperationsException, IllegalArgumentException
ModelMBeanNotificationBroadcaster
复制
addAttributeChangeNotificationListener
在界面
ModelMBeanNotificationBroadcaster
inlistener
- 将处理由注册MBean发出的通知的侦听器对象。
inAttributeName
- 要接收更改通知的ModelMBean属性的名称。
如果为null,则所有属性更改将导致发出attributeChangeNotification。
inhandback
- 发出通知时发送给侦听器的上下文通知。
MBeanException
- 包装分布式通信异常。
RuntimeOperationsException
- 包裹一个IllegalArgumentException参数中传递的属性名称不存在。
IllegalArgumentException
- 侦听器不能为null。
ModelMBeanNotificationBroadcaster.removeAttributeChangeNotificationListener(javax.management.NotificationListener, java.lang.String)
public void removeAttributeChangeNotificationListener(NotificationListener inlistener, String inAttributeName) throws MBeanException, RuntimeOperationsException, ListenerNotFoundException
ModelMBeanNotificationBroadcaster
复制
removeAttributeChangeNotificationListener
在界面
ModelMBeanNotificationBroadcaster
inlistener
- 处理由注册MBean发出的通知的侦听器名称。
此方法将删除与此侦听器相关的所有信息。
inAttributeName
- 侦听器不再需要接收attributeChangeNotifications的属性。
如果为null,则将为所有attributeChangeNotifications移除侦听器。
MBeanException
- 包装分布式通信异常。
RuntimeOperationsException
- 包裹一个IllegalArgumentException如果inAttributeName参数与属性名称不对应。
ListenerNotFoundException
- 监听器未在MBean中注册或为空。
ModelMBeanNotificationBroadcaster.addAttributeChangeNotificationListener(javax.management.NotificationListener, java.lang.String, java.lang.Object)
public void sendAttributeChangeNotification(AttributeChangeNotification ntfyObj) throws MBeanException, RuntimeOperationsException
ModelMBeanNotificationBroadcaster
复制
sendAttributeChangeNotification
在界面
ModelMBeanNotificationBroadcaster
ntfyObj
- 要传递给侦听器对象的“handleNotification”方法的通知。
MBeanException
- 包裹分布式通信异常。
RuntimeOperationsException
- 包裹一个IllegalArgumentException:参数中传递的AttributeChangeNotification对象为null。
public void sendAttributeChangeNotification(Attribute inOldVal, Attribute inNewVal) throws MBeanException, RuntimeOperationsException
ModelMBeanNotificationBroadcaster
复制
sendAttributeChangeNotification
在界面
ModelMBeanNotificationBroadcaster
inOldVal
-
inOldVal
的原始值
inNewVal
- inNewVal
的当前值
The constructed attributeChangeNotification will be:
type "jmx.attribute.change"
source this ModelMBean instance
sequence 1
attributeName oldValue.getName()
attributeType oldValue's class
attributeOldValue oldValue.getValue()
attributeNewValue newValue.getValue()
MBeanException
- 包装分布式通信异常。
RuntimeOperationsException
- 包裹一个IllegalArgumentException:在参数中传递的属性对象为null或参数中两个Attribute对象的名称不相同。
protected ClassLoaderRepository getClassLoaderRepository()
ClassLoaderRepository
。
public ObjectName preRegister(MBeanServer server, ObjectName name) throws 异常
为了确保RequireModelMBean的正常运行时间的语义,RequiredModelMBean的任何子类重载或重写此方法应调用super.preRegister(server, name)
在自己preRegister
实现。
preRegister
在界面
MBeanRegistration
server
- MBean将在其中
server
的MBean服务器。
name
- MBean的对象名称。
此名称为null如果名称参数的一个createMBean
或registerMBean
方法在MBeanServer
接口为空。
在这种情况下,此方法必须为新的MBean返回非空的ObjectName。
name
参数不为空,则通常不一定是返回值。
异常
- 此异常将被MBean服务器捕获,并重新抛出为MBeanRegistrationException
。
public void postRegister(Boolean registrationDone)
为了确保RequireModelMBean的正常运行时间的语义,RequiredModelMBean的任何子类重载或重写此方法应调用super.postRegister(registrationDone)
在自己postRegister
实现。
postRegister
在界面
MBeanRegistration
registrationDone
- 指示MBean是否已成功注册到MBean服务器中。
值false表示注册阶段失败。
public void preDeregister() throws 异常
为了确保RequireModelMBean的正常运行时间的语义,RequiredModelMBean的任何子类重载或重写此方法应调用super.preDeregister()
在自己preDeregister
实现。
preDeregister
在界面
MBeanRegistration
异常
- 此异常将被MBean服务器捕获,并重新抛出为MBeanRegistrationException
。
public void postDeregister()
为了确保RequireModelMBean的正常运行时间的语义,RequiredModelMBean的任何子类重载或重写此方法应调用super.postDeregister()
在自己postDeregister
实现。
postDeregister
在界面
MBeanRegistration