- 所有已实现的接口:
-
DynamicMBean
,MBeanRegistration
- 直接已知的子类:
-
StandardEmitterMBean
通过在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 Summary
ModifierConstructorDescriptionprotected
StandardMBean
(Class<?> mbeanInterface) 将this转换为DynamicMBean,使用指定的mbeanInterface类。protected
StandardMBean
(Class<?> mbeanInterface, boolean isMXBean) 将this转换为DynamicMBean,使用指定的mbeanInterface类,并选择生成的MBean是否为MXBean。StandardMBean
(T implementation, Class<T> mbeanInterface) 将对象implementation转换为DynamicMBean,使用指定的mbeanInterface类。StandardMBean
(T implementation, Class<T> mbeanInterface, boolean isMXBean) 将对象implementation转换为DynamicMBean,使用指定的mbeanInterface类,并选择生成的MBean是否为MXBean。 -
Method Summary
Modifier and TypeMethodDescriptionprotected void
cacheMBeanInfo
(MBeanInfo info) 自定义钩子:缓存为该对象构建的MBeanInfo。getAttribute
(String attribute) 获取Dynamic MBean的特定属性的值。getAttributes
(String[] attributes) 获取Dynamic MBean的多个属性的值。protected MBeanInfo
自定义钩子:返回为该对象缓存的MBeanInfo。protected String
getClassName
(MBeanInfo info) 自定义钩子:获取该MBean返回的MBeanInfo中将使用的类名。protected MBeanConstructorInfo[]
getConstructors
(MBeanConstructorInfo[] ctors, Object impl) 自定义钩子:获取该MBean返回的MBeanInfo中将使用的MBeanConstructorInfo[]。protected String
自定义钩子:获取该MBean返回的MBeanAttributeInfo中将使用的描述。protected String
自定义钩子:获取该MBean返回的MBeanConstructorInfo中将使用的描述。protected String
getDescription
(MBeanConstructorInfo ctor, MBeanParameterInfo param, int sequence) 自定义钩子:获取该MBean返回的MBeanConstructorInfo中sequence MBeanParameterInfo的描述。protected String
自定义钩子:获取该MBean返回的MBeanFeatureInfo中将使用的描述。protected String
getDescription
(MBeanInfo info) 自定义钩子:获取该MBean返回的MBeanInfo中将使用的描述。protected String
自定义钩子:获取该MBean返回的MBeanOperationInfo中将使用的描述。protected String
getDescription
(MBeanOperationInfo op, MBeanParameterInfo param, int sequence) 自定义钩子:获取该MBean返回的MBeanOperationInfo中sequence MBeanParameterInfo的描述。protected int
getImpact
(MBeanOperationInfo info) 自定义钩子:获取该MBean返回的MBeanOperationInfo中将使用的操作impact标志。获取该标准MBean(或MXBean)的实现。Class
<?> 获取该标准MBean(或MXBean)的实现类。获取该MBean的MBeanInfo
。final Class
<?> 获取该标准MBean(或MXBean)的管理接口。protected String
getParameterName
(MBeanConstructorInfo ctor, MBeanParameterInfo param, int sequence) 自定义钩子:获取该MBean返回的MBeanConstructorInfo中sequence MBeanParameterInfo的名称。protected String
getParameterName
(MBeanOperationInfo op, MBeanParameterInfo param, int sequence) 自定义钩子:获取该MBean返回的MBeanOperationInfo中sequence MBeanParameterInfo的名称。允许在Dynamic MBean上调用操作。void
允许MBean在MBean服务器中注销后执行所需的任何操作。void
postRegister
(Boolean registrationDone) 允许MBean在MBean服务器中注册后或注册失败后执行所需的任何操作。void
允许MBean在被MBean服务器注销之前执行所需的任何操作。preRegister
(MBeanServer server, ObjectName name) 允许MBean在被MBean服务器注册之前执行所需的任何操作。void
setAttribute
(Attribute attribute) 设置Dynamic MBean的特定属性的值。setAttributes
(AttributeList attributes) 设置Dynamic MBean的多个属性的值。void
setImplementation
(Object implementation) 替换包含在此对象中的实现对象。
-
Constructor Details
-
StandardMBean
将对象implementation转换为DynamicMBean,使用指定的mbeanInterface类。
- 类型参数:
-
T
- 允许编译器检查implementation
确实实现了mbeanInterface
描述的类。如果mbeanInterface
是类文字,如MyMBean.class
,则编译器只能检查这一点。 - 参数:
-
implementation
- 此MBean的实现。 -
mbeanInterface
- 此MBean实现导出的管理接口。如果为null
,则此对象将使用标准JMX设计模式来确定与给定实现关联的管理接口。 - 抛出:
-
IllegalArgumentException
- 如果给定的implementation为null。 -
NotCompliantMBeanException
- 如果mbeanInterface不遵循管理接口的JMX设计模式,或者给定的implementation未实现指定的接口。
-
StandardMBean
将this转换为DynamicMBean,使用指定的mbeanInterface类。
调用
this(this,mbeanInterface)
。此构造函数保留给子类使用。- 参数:
-
mbeanInterface
- 此MBean导出的管理接口。 - 抛出:
-
NotCompliantMBeanException
- 如果mbeanInterface不遵循管理接口的JMX设计模式,或者this未实现指定的接口。
-
StandardMBean
将对象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
将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
替换此对象中包装的实现对象。
- 参数:
-
implementation
- 此标准MBean(或MXBean)的新实现。implementation
对象必须实现在构造此StandardMBean
时提供的标准MBean(或MXBean)接口。 - 抛出:
-
IllegalArgumentException
- 如果给定的implementation为null。 -
NotCompliantMBeanException
- 如果给定的implementation没有实现在构造时提供的标准MBean(或MXBean)接口。 - 参见:
-
getImplementation
获取此标准MBean(或MXBean)的实现。- 返回:
- 此标准MBean(或MXBean)的实现。
- 参见:
-
getMBeanInterface
获取此标准MBean(或MXBean)的管理接口。- 返回:
- 此标准MBean(或MXBean)的管理接口。
-
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
public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException 从接口复制的描述:DynamicMBean
设置动态MBean的特定属性的值。- 指定者:
-
setAttribute
在接口DynamicMBean
中 - 参数:
-
attribute
- 要设置的属性的标识和要设置的值。 - 抛出:
-
AttributeNotFoundException
- 如果指定的属性不存在或无法检索 -
InvalidAttributeValueException
- 如果指定的值对属性无效 -
MBeanException
- 包装了MBean的setter抛出的java.lang.Exception
。 -
ReflectionException
- 在尝试调用MBean的setter时抛出的java.lang.Exception
的包装。 - 参见:
-
getAttributes
从接口复制的描述:DynamicMBean
获取动态MBean的多个属性的值。- 指定者:
-
getAttributes
在接口DynamicMBean
中 - 参数:
-
attributes
- 要检索的属性列表。 - 返回:
- 检索到的属性列表。
- 参见:
-
setAttributes
从接口复制的描述: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
获取此MBean的MBeanInfo
。此方法实现了
DynamicMBean.getMBeanInfo()
。此方法首先调用
getCachedMBeanInfo()
以检索此MBean的缓存MBeanInfo(如果有)。 如果getCachedMBeanInfo()
返回的MBeanInfo不为null,则返回该MBeanInfo。
否则,此方法使用为此MBean指定的管理接口构建默认的MBeanInfo。在构建MBeanInfo时,此方法调用定制钩子,使子类能够提供其自定义描述、参数名称等...
最后,它调用cacheMBeanInfo()
以缓存新的MBeanInfo。- 指定者:
-
getMBeanInfo
在接口DynamicMBean
中 - 返回:
- 该MBean的缓存MBeanInfo,如果不为null,则返回新构建的MBeanInfo。
-
getClassName
定制钩子: 获取将在此MBean返回的MBeanInfo中使用的类名。
子类可以重新定义此方法以提供其自定义类名。 默认实现返回info.getClassName()
。- 参数:
-
info
- 通过反射派生的默认MBeanInfo。 - 返回:
- 新MBeanInfo的类名。
-
getDescription
自定义钩子:获取将在此MBean返回的MBeanInfo中使用的描述。
子类可以重新定义此方法以提供其自定义MBean描述。默认实现返回info.getDescription()
。- 参数:
-
info
- 通过反射派生的默认MBeanInfo。 - 返回:
- 新MBeanInfo的描述。
-
getDescription
自定义钩子:获取将在此MBean返回的MBeanFeatureInfo中使用的描述。
子类可以重新定义此方法以提供其自定义描述。默认实现返回
info.getDescription()
。此方法由
getDescription(MBeanAttributeInfo)
、getDescription(MBeanOperationInfo)
、getDescription(MBeanConstructorInfo)
调用。- 参数:
-
info
- 通过反射派生的默认MBeanFeatureInfo。 - 返回:
- 给定MBeanFeatureInfo的描述。
-
getDescription
自定义钩子:获取将在此MBean返回的MBeanAttributeInfo中使用的描述。子类可以重新定义此方法以提供其自定义描述。默认实现返回
getDescription((MBeanFeatureInfo) info)
。- 参数:
-
info
- 通过反射派生的默认MBeanAttributeInfo。 - 返回:
- 给定MBeanAttributeInfo的描述。
-
getDescription
自定义钩子:获取将在此MBean返回的MBeanConstructorInfo中使用的描述。
子类可以重新定义此方法以提供其自定义描述。默认实现返回getDescription((MBeanFeatureInfo) info)
。- 参数:
-
info
- 通过反射派生的默认MBeanConstructorInfo。 - 返回:
- 给定MBeanConstructorInfo的描述。
-
getDescription
自定义钩子:获取将在此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
自定义钩子:获取将在此MBean返回的MBeanOperationInfo中使用的描述。
子类可以重新定义此方法以提供其自定义描述。默认实现返回getDescription((MBeanFeatureInfo) info)
。- 参数:
-
info
- 通过反射派生的默认MBeanOperationInfo。 - 返回:
- 给定MBeanOperationInfo的描述。
-
getImpact
自定义钩子:获取将在此MBean返回的MBeanOperationInfo中使用的impact标志。
子类可以重新定义此方法以提供其自定义影响标志。默认实现返回info.getImpact()
。- 参数:
-
info
- 通过反射派生的默认MBeanOperationInfo。 - 返回:
- 给定MBeanOperationInfo的影响标志。
-
getParameterName
自定义钩子:获取将在此MBean返回的MBeanOperationInfo中使用的sequence MBeanParameterInfo的名称。
子类可以重新定义此方法以提供其自定义参数名称。默认实现返回param.getName()
。- 参数:
-
op
- 通过反射派生的默认MBeanOperationInfo。 -
param
- 通过反射派生的默认MBeanParameterInfo。 -
sequence
- 考虑的参数的序号(第一个参数为“0”,第二个参数为“1”等)。 - 返回:
- 给定MBeanParameterInfo的名称。
-
getDescription
自定义钩子:获取将在此MBean返回的MBeanOperationInfo中使用的sequence MBeanParameterInfo的描述。
子类可以重新定义此方法以提供其自定义描述。默认实现返回param.getDescription()
。- 参数:
-
op
- 通过反射派生的默认MBeanOperationInfo。 -
param
- 通过反射派生的默认MBeanParameterInfo。 -
sequence
- 考虑的参数的序号(第一个参数为“0”,第二个参数为“1”等)。 - 返回:
- 给定MBeanParameterInfo的描述。
-
getConstructors
自定义钩子:获取将在此MBean返回的MBeanInfo中使用的MBeanConstructorInfo[]。
默认情况下,如果包装实现不是this,此方法返回null
。实际上,如果包装实现不是此对象本身,则将无法通过调用MBeanServer.createMBean(...)
的实现构造函数重新创建包装实现。
否则,如果包装实现是this,则返回ctors。
子类可以重新定义此方法以修改此行为(如果需要)。- 参数:
-
ctors
- 通过反射派生的默认MBeanConstructorInfo[]。 -
impl
- 包装的实现。如果传递了null
,则忽略包装的实现并返回ctors。 - 返回:
- 新MBeanInfo的MBeanConstructorInfo[]。
-
getCachedMBeanInfo
自定义钩子:返回为此对象缓存的MBeanInfo。子类可以重新定义此方法以实现自己的缓存策略。默认实现每个实例存储一个
MBeanInfo
对象。- 返回:
- 缓存的MBeanInfo,如果没有缓存MBeanInfo,则返回null。
- 参见:
-
cacheMBeanInfo
自定义钩子:缓存为此对象构建的MBeanInfo。子类可以重新定义此方法以实现自己的缓存策略。默认实现将
info
存储在此实例中。子类可以定义其他策略,例如不保存info
(因此每次调用getMBeanInfo()
时都会重新构建)或在多个StandardMBean
实例具有相等的MBeanInfo
值时共享唯一的MBeanInfo
对象。- 参数:
-
info
- 要缓存的新MBeanInfo
。任何先前缓存的值都将被丢弃。此参数可以为null,如果为null,则没有新的缓存值。
-
preRegister
允许MBean在注册到MBean服务器之前执行其需要的任何操作。如果未指定MBean的名称,MBean可以为其注册提供名称。如果引发任何异常,则MBean将不会在MBean服务器中注册。
此方法的默认实现返回
name
参数。对于标准MBean,它不执行其他操作。对于MXBeans,它记录MBeanServer
和ObjectName
参数,以便可以用于转换MXBean之间的引用。如果子类重写此方法,则最好通过
super.preRegister(...)
调用重写的方法。如果此对象是由其他MXBean的属性或操作引用的MXBean,则这是必要的。- 指定者:
-
preRegister
在接口MBeanRegistration
中 - 参数:
-
server
- 将注册MBean的MBean服务器。 -
name
- MBean的对象名称。如果在MBeanServer
接口的createMBean
或registerMBean
方法的name参数为null,则此名称为null。在这种情况下,此方法必须为新MBean返回一个非null的ObjectName。 - 返回:
-
MBean要注册的名称。此值不能为空。如果
name
参数不为null,则通常但不一定是返回的值。 - 抛出:
-
IllegalArgumentException
- 如果这是一个MXBean且name
为null。 -
InstanceAlreadyExistsException
- 如果这是一个MXBean,并且它已经在MBean服务器中或其他地方使用另一个名称注册。 -
Exception
- 此方法不会抛出其他已检查异常,但声明Exception
以便子类可以重写该方法并抛出自己的异常。 - 自从:
- 1.6
-
postRegister
允许MBean在在MBean服务器中注册后或注册失败后执行所需的任何操作。
对于标准MBean,此方法的默认实现不执行任何操作。对于MXBeans,如果注册失败,它会撤消
preRegister
方法执行的任何操作。如果子类重写此方法,最好通过
super.postRegister(...)
调用重写的方法。如果此对象是其他MXBeans中的属性或操作引用的MXBean,则这是必要的。- 指定者:
-
postRegister
在接口MBeanRegistration
中 - 参数:
-
registrationDone
- 表示MBean是否已成功在MBean服务器中注册。值false表示注册阶段失败。 - 自从:
- 1.6
-
preDeregister
允许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
-