|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
javax.management
接口 MBeanServer
- 所有超级接口:
- MBeanServerConnection
- 所有已知子接口:
- MBeanServerForwarder
-
public interface MBeanServer
- extends MBeanServerConnection
这是在代理端进行 MBean 操作的接口。它包含创建、注册和删除 MBean 所需的方法,以及已注册 MBean 的访问方法。这是 JMX 基础设施的核心组件。
用户代码通常不实现此接口。相反,应该使用 MBeanServerFactory
类中的某个方法获得实现此接口的对象。
添加到 MBean 服务器中的所有 MBean 都会变成可管理的:通过连接到该 MBeanServer 的连接器/适配器可以远程访问其属性和操作。Java 对象不能在 MBean 服务器中进行注册,除非它是 JMX 兼容的 MBean。
在 MBean 服务器中注册或注销 MBean 时,会发出一个 MBeanServerNotification
Notification。要将一个对象注册为 MBeanServerNotifications 的侦听器,应该使用 MBeanServerDelegate
的 ObjectName
作为 ObjectName
参数调用 MBean 服务器方法 addNotificationListener
。此 ObjectName
是:JMImplementation:type=MBeanServerDelegate
。
从 MBeanServerFactory
类的 createMBeanServer
或 newMBeanServer
方法所获得的对象会对其方法进行安全检查,如下所示:
首先,如果没有安全管理器(System.getSecurityManager()
为 null),则不进行检查。
假定存在安全管理器,则进行检查,检查细节如下;className
是目标 MBean 的 MBeanInfo.getClassName()
所返回的字符串。
如果安全检查失败,则该方法抛出 SecurityException
。
对于可抛出 InstanceNotFoundException
的方法,会为不存在的 MBean 抛出此异常,而不管权限如何。这是因为不存在的 MBean 没有 className
。
对于
invoke
方法,调用方的权限必须隐含MBeanPermission(className, operationName, name, "invoke")
。对于
getAttribute
方法,调用方的权限必须隐含MBeanPermission(className, attribute, name, "getAttribute")
。对于
getAttributes
方法,调用方的权限必须隐含MBeanPermission(className, null, name, "getAttribute")
。另外,对于AttributeList
中的每个属性 a,如果调用方的权限未隐含MBeanPermission(className, a, name, "getAttribute")
,则 MBean 服务器的行为与该属性未在所提供的列表中一样。对于
setAttribute
方法,调用方的权限必须隐含MBeanPermission(className, attrName, name, "setAttribute")
,其中attrName
是attribute.getName()
。对于
setAttributes
方法,调用方的权限必须隐含MBeanPermission(className, null, name, "setAttribute")
。另外,对于AttributeList
中的每个属性 a,如果调用方的权限并未隐含MBeanPermission(className, a, name, "setAttribute")
,则 MBean 服务器的行为与该属性未在所提供的列表中一样。对于
addNotificationListener
方法,调用方的权限必须隐含MBeanPermission(className, null, name, "addNotificationListener")
。对于
removeNotificationListener
方法,调用方的权限必须隐含MBeanPermission(className, null, name, "removeNotificationListener")
。对于
getMBeanInfo
方法,调用方的权限必须隐含MBeanPermission(className, null, name, "getMBeanInfo")
。对于
getObjectInstance
方法,调用方的权限必须隐含MBeanPermission(className, null, name, "getObjectInstance")
。对于
isInstanceOf
方法,调用方的权限必须隐含MBeanPermission(className, null, name, "isInstanceOf")
。对于
queryMBeans
方法,调用方的权限必须隐含MBeanPermission(null, null, name, "queryMBeans")
。另外,对于与name
匹配的每个 MBean,如果调用方的权限未隐含MBeanPermission(className, null, name, "queryMBeans")
,则 MBean 服务器的行为与该 MBean 不存在一样。某些查询元素在 MBean 服务器上执行操作。如果调用方不具有针对给定 MBean 的所需权限,则查询结果中不包括该 MBean。受此影响的标准查询元素是
Query.attr(String)
、Query.attr(String,String)
和Query.classattr()
。对于
queryNames
方法,执行的检查与queryMBeans
方法相同,除了在MBeanPermission
对象中使用"queryNames"
而不是"queryMBeans"
。注意,"queryMBeans"
权限隐含相应的"queryNames"
权限。对于
getDomains
方法,调用方的权限必须隐含MBeanPermission(null, null, name, "getDomains")
。另外,对于返回数组中的每个域 d,如果调用方的权限未隐含MBeanPermission(null, null, new ObjectName("d:x=x"), "getDomains")
,则从数组中消除该域。其中x=x
是任意键=值 对,需要满足 ObjectName 的构造方法的要求,但与其他内容无关。对于
getClassLoader
方法,调用方的权限必须隐含MBeanPermission(className, null, loaderName, "getClassLoader")
。对于
getClassLoaderFor
方法,调用方的权限必须隐含MBeanPermission(className, null, mbeanName, "getClassLoaderFor")
。对于
getClassLoaderRepository
方法,调用方的权限必须隐含MBeanPermission(null, null, null, "getClassLoaderRepository")
。对于已过时的
deserialize
方法,所需的权限与替换它们的方法的权限相同。对于
instantiate
方法,调用方的权限必须隐含MBeanPermission(className, null, null, "instantiate")
。对于
registerMBean
方法,调用方的权限必须隐含MBeanPermission(className, null, name, "registerMBean")
。其中className
是MBeanInfo.getClassName()
为此类某个对象返回的字符串。如果
MBeanPermission
检查成功,则验证该 MBean 的类,方法是检查其ProtectionDomain
是否隐含MBeanTrustPermission("register")
。最后,如果
name
参数为 null,则使用MBeanRegistration.preRegister
返回的ObjectName
进行另一次MBeanPermission
检查。对于
createMBean
方法,调用方法的权限必须隐含等效的instantiate
后跟registerMBean
所需的权限。对于
unregisterMBean
方法,调用方的权限必须隐含MBeanPermission(className, null, name, "unregisterMBean")
。
- 从以下版本开始:
- 1.5
方法摘要 | |
---|---|
void |
addNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) 向已注册的 MBean 添加一个侦听器。 |
void |
addNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) 向已注册的 MBean 添加一个侦听器。 |
ObjectInstance |
createMBean(String className, ObjectName name) 在 MBean 服务器中实例化并注册一个 MBean。 |
ObjectInstance |
createMBean(String className, ObjectName name, Object[] params, String[] signature) 在 MBean 服务器中实例化并注册一个 MBean。 |
ObjectInstance |
createMBean(String className, ObjectName name, ObjectName loaderName) 在 MBean 服务器中实例化并注册一个 MBean。 |
ObjectInstance |
createMBean(String className, ObjectName name, ObjectName loaderName, Object[] params, String[] signature) 在 MBean 服务器中实例化并注册一个 MBean。 |
ObjectInputStream |
deserialize(ObjectName name, byte[] data) 已过时。 使用 getClassLoaderFor 为反序列化获得合适的类加载器。 |
ObjectInputStream |
deserialize(String className, byte[] data) 已过时。 使用 getClassLoaderRepository() 来获得类加载器存储库并使用它进行反序列化。 |
ObjectInputStream |
deserialize(String className, ObjectName loaderName, byte[] data) 已过时。 使用 getClassLoader 为反序列化获得类加载器。 |
Object |
getAttribute(ObjectName name, String attribute) 获得指定 MBean 的特定属性值。 |
AttributeList |
getAttributes(ObjectName name, String[] attributes) 获得指定 MBean 的多个属性值。 |
ClassLoader |
getClassLoader(ObjectName loaderName) 返回指定的 ClassLoader 。 |
ClassLoader |
getClassLoaderFor(ObjectName mbeanName) 返回用于加载指定 MBean 的类的 ClassLoader 。 |
ClassLoaderRepository |
getClassLoaderRepository() 返回此 MBeanServer 的 ClassLoaderRepository。 |
String |
getDefaultDomain() 返回对 MBean 命名时使用的默认域。 |
String[] |
getDomains() 返回其中所有 MBean 当前已注册的域的列表。 |
Integer |
getMBeanCount() 返回 MBean 服务器中已注册的 MBean 数目。 |
MBeanInfo |
getMBeanInfo(ObjectName name) 此方法发现了 MBean 为管理而公开的属性和操作。 |
ObjectInstance |
getObjectInstance(ObjectName name) 获得向 MBean 服务器注册的给定 MBean 的 ObjectInstance 。 |
Object |
instantiate(String className) 使用 MBean 服务器的 Class Loader Repository 中所有已注册的类加载器列表实例化一个对象。 |
Object |
instantiate(String className, Object[] params, String[] signature) 使用 MBean 服务器的 Class Loader Repository 中所有已注册的类加载器列表实例化一个对象。 |
Object |
instantiate(String className, ObjectName loaderName) 使用由某个对象的 ObjectName 所指定的类加载器实例化该对象。 |
Object |
instantiate(String className, ObjectName loaderName, Object[] params, String[] signature) 实例化一个对象。 |
Object |
invoke(ObjectName name, String operationName, Object[] params, String[] signature) 在 MBean 上调用某个操作。 |
boolean |
isInstanceOf(ObjectName name, String className) 如果指定的 MBean 是指定类的一个实例,则返回 true;否则返回 false。 |
boolean |
isRegistered(ObjectName name) 检查某个 MBean(通过其对象名标识)是否已向 MBean 服务器注册。 |
Set |
queryMBeans(ObjectName name, QueryExp query) 获得该 MBean 服务器所控制的 MBean。 |
Set |
queryNames(ObjectName name, QueryExp query) 获得该 MBean 服务器所控制的 MBean 的名称。 |
ObjectInstance |
registerMBean(Object object, ObjectName name) 将某个预先存在的对象作为 MBean 注册到 MBean 服务器中。 |
void |
removeNotificationListener(ObjectName name, NotificationListener listener) 从已注册的 MBean 中移除一个侦听器。 |
void |
removeNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) 从已注册的 MBean 中移除一个侦听器。 |
void |
removeNotificationListener(ObjectName name, ObjectName listener) 从已注册的 MBean 中移除一个侦听器。 |
void |
removeNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) 从已注册的 MBean 中移除一个侦听器。 |
void |
setAttribute(ObjectName name, Attribute attribute) 设置指定 MBean 的特定属性值。 |
AttributeList |
setAttributes(ObjectName name, AttributeList attributes) 设置指定 MBean 的多个属性值。 |
void |
unregisterMBean(ObjectName name) 从 MBean 服务器注销一个 MBean。 |
方法详细信息 |
---|
createMBean
ObjectInstance createMBean(String className, ObjectName name) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException
-
在 MBean 服务器中实例化并注册一个 MBean。MBean 服务器将使用其
默认的 Loader Repository
来加载 MBean 的类。对象名与该 MBean 相关联。 如果给定的对象名为 null,则该 MBean 必须提供自己的名称,方法是实现MBeanRegistration
接口并从preRegister
方法中返回名称。此方法等效于
createMBean(className, name, (Object[]) null, (String[]) null)
。 -
- 指定者:
-
接口
MBeanServerConnection
中的createMBean
-
- 参数:
-
className
- 要实例化的 MBean 的类名。 -
name
- MBean 的对象名。可以为 null。 - 返回:
-
一个
ObjectInstance
,包含新初始化的 MBean 的ObjectName
和 Java 类名。如果包含的ObjectName
是n
,则所包含的 Java 类名是
。getMBeanInfo(n)
.getClassName() - 抛出:
-
ReflectionException
- 包装在试图调用 MBean 的构造方法时所出现的java.lang.ClassNotFoundException
或
。java.lang.Exception
-
InstanceAlreadyExistsException
- 如果该 MBean 已经处于 MBean 服务器的控制之下。 -
MBeanRegistrationException
- 如果 MBean 的preRegister
(MBeanRegistration
接口)方法已经抛出异常。不注册该 MBean。 -
MBeanException
- 如果 MBean 的构造方法已经抛出异常 -
NotCompliantMBeanException
- 如果此类不是符合 JMX 的 MBean -
RuntimeOperationsException
- 包装java.lang.IllegalArgumentException
:如果传入参数中的 className 为 null,传入参数中的ObjectName
包含一个模式或者没有为该 MBean 指定ObjectName
。
createMBean
ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException
-
在 MBean 服务器中实例化并注册一个 MBean。通过其对象名标识使用的类加载器。对象名与该 MBean 相关联。如果加载器的对象名为 null,则将使用加载 MBean 服务器的 ClassLoader。如果给定的 MBean 对象名为 null,则该 MBean 必须提供自己的名称,方法是实现
MBeanRegistration
接口并从preRegister
方法中返回名称。此方法等效于
createMBean(className, name, loaderName, (Object[]) null, (String[]) null)
。 -
- 指定者:
-
接口
MBeanServerConnection
中的createMBean
-
- 参数:
-
className
- 要实例化的 MBean 的类名。 -
name
- MBean 的对象名。可以为 null。 -
loaderName
- 要使用的类加载器的对象名。 - 返回:
-
一个
ObjectInstance
,包含新初始化的 MBean 的ObjectName
和 Java 类名。如果包含的ObjectName
是n
,则所包含的 Java 类名是
。getMBeanInfo(n)
.getClassName() - 抛出:
-
ReflectionException
- 包装在试图调用 MBean 的构造方法时所出现的java.lang.ClassNotFoundException
或java.lang.Exception
。 -
InstanceAlreadyExistsException
- 如果该 MBean 已经处于 MBean 服务器的控制之下。 -
MBeanRegistrationException
- 如果 MBean 的preRegister
(MBeanRegistration
接口)方法已经抛出异常。不注册该 MBean。 -
MBeanException
- 如果 MBean 的构造方法已经抛出异常 -
NotCompliantMBeanException
- 如果此类不是符合 JMX 的 MBean -
InstanceNotFoundException
- 如果未在 MBean 服务器中注册指定的类加载器。 -
RuntimeOperationsException
- 包装java.lang.IllegalArgumentException
:如果传入参数中的 className 为 null,传入参数中的ObjectName
包含一个模式或者没有为该 MBean 指定ObjectName
。
createMBean
ObjectInstance createMBean(String className, ObjectName name, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException
-
在 MBean 服务器中实例化并注册一个 MBean。MBean 服务器将使用其
默认的 Loader Repository
来加载 MBean 的类。对象名与该 MBean 相关联。如果给定的对象名为 null,则该 MBean 必须提供自己的名称,方法是实现MBeanRegistration
接口并从preRegister
方法中返回名称。 -
- 指定者:
-
接口
MBeanServerConnection
中的createMBean
-
- 参数:
-
className
- 要实例化的 MBean 的类名。 -
name
- MBean 的对象名。可以为 null。 -
params
- 一个数组,包含要调用的构造方法的参数。 -
signature
- 一个数组,包含要调用的构造方法的签名。 - 返回:
-
一个
ObjectInstance
,包含新初始化的 MBean 的ObjectName
和 Java 类名。如果包含的ObjectName
是n
,则所包含的 Java 类名是
。getMBeanInfo(n)
.getClassName() - 抛出:
-
ReflectionException
- 包装在试图调用 MBean 的构造方法时所出现的java.lang.ClassNotFoundException
或java.lang.Exception
。 -
InstanceAlreadyExistsException
- 如果该 MBean 已经处于 MBean 服务器的控制之下。 -
MBeanRegistrationException
- 如果 MBean 的preRegister
(MBeanRegistration
接口)方法已经抛出异常。不注册该 MBean。 -
MBeanException
- 如果 MBean 的构造方法已经抛出异常 -
NotCompliantMBeanException
- 如果此类不是 JMX 兼容的 MBean -
RuntimeOperationsException
- 包装java.lang.IllegalArgumentException
:如果传入参数中的 className 为 null,传入参数中的ObjectName
包含一个模式或者没有为该 MBean 指定ObjectName
。
createMBean
ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException
-
在 MBean 服务器中实例化并注册一个 MBean。通过其对象名标识使用的类加载器。对象名与该 MBean 相关联。如果未指定加载器的对象名,则将使用加载 MBean 服务器的 ClassLoader。如果给定的 MBean 对象名为 null,则该 MBean 必须提供自己的名称,方法是实现
MBeanRegistration
接口并从preRegister
方法中返回名称。 -
- 指定者:
-
接口
MBeanServerConnection
中的createMBean
-
- 参数:
-
className
- 要实例化的 MBean 的类名。 -
name
- MBean 的对象名。可以为 null。 -
params
- 一个数组,包含要调用的构造方法的参数。 -
signature
- 一个数组,包含要调用的构造方法的签名。 -
loaderName
- 要使用的类加载器的对象名。 - 返回:
-
一个
ObjectInstance
,包含新初始化的 MBean 的ObjectName
和 Java 类名。如果包含的ObjectName
是n
,则所包含的 Java 类名是
。getMBeanInfo(n)
.getClassName() - 抛出:
-
ReflectionException
- 包装在试图调用 MBean 的构造方法时所出现的java.lang.ClassNotFoundException
或java.lang.Exception
。 -
InstanceAlreadyExistsException
- 如果该 MBean 已经处于 MBean 服务器的控制之下。 -
MBeanRegistrationException
- 如果 MBean 的preRegister
(MBeanRegistration
接口)方法已经抛出异常。不注册该 MBean。 -
MBeanException
- 如果 MBean 的构造方法已经抛出异常 -
NotCompliantMBeanException
- 如果此类不是符合 JMX 的 MBean -
InstanceNotFoundException
- 如果未在 MBean 服务器中注册指定的类加载器。 -
RuntimeOperationsException
- 包装java.lang.IllegalArgumentException
:如果传入参数中的 className 为 null,传入参数中的ObjectName
包含一个模式或者没有为该 MBean 指定ObjectName
。
registerMBean
ObjectInstance registerMBean(Object object, ObjectName name) throws InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException
-
将某个预先存在的对象作为 MBean 注册到 MBean 服务器中。如果给定的对象名为 null,则该 MBean 必须提供自己的名称,方法是实现
MBeanRegistration
接口并从preRegister
方法中返回名称。 -
-
- 参数:
-
object
- 要作为 MBean 注册的 MBean。 -
name
- MBean 的对象名。可以为 null。 - 返回:
-
一个
ObjectInstance
,包含新注册的 MBean 的ObjectName
和 Java 类名。如果包含的ObjectName
是n
,则所包含的 Java 类名是
。getMBeanInfo(n)
.getClassName() - 抛出:
-
InstanceAlreadyExistsException
- 如果该 MBean 已经处于 MBean 服务器的控制之下。 -
MBeanRegistrationException
- 如果 MBean 的preRegister
(MBeanRegistration
接口)方法已经抛出异常。不注册该 MBean。 -
NotCompliantMBeanException
- 如果此对象不是 JMX 兼容的 MBean -
RuntimeOperationsException
- 包装java.lang.IllegalArgumentException
:如果传入参数中的对象为 null 或者未指定对象名。
unregisterMBean
void unregisterMBean(ObjectName name) throws InstanceNotFoundException, MBeanRegistrationException
- 从 MBean 服务器注销一个 MBean。通过 MBean 的对象名来标识 MBean。一旦调用了该方法,就无法再通过 MBean 的对象名来访问该 MBean。
-
- 指定者:
-
接口
MBeanServerConnection
中的unregisterMBean
-
- 参数:
-
name
- 要注销的 MBean 的对象名。 - 抛出:
-
InstanceNotFoundException
- 如果指定的 MBean 未在该 MBean 服务器中注册。 -
MBeanRegistrationException
- 如果 MBean 的 preDeregister(MBeanRegistration
接口)方法已经抛出异常。 -
RuntimeOperationsException
- 包装java.lang.IllegalArgumentException
:如果参数中的对象名为 null,或者试图注销的 MBean 是MBeanServerDelegate
MBean。
getObjectInstance
ObjectInstance getObjectInstance(ObjectName name) throws InstanceNotFoundException
-
获得向 MBean 服务器注册的给定 MBean 的
ObjectInstance
。 -
- 指定者:
-
接口
MBeanServerConnection
中的getObjectInstance
-
- 参数:
-
name
- MBean 的对象名。 - 返回:
-
与 name 所指定的 MBean 相关联的
ObjectInstance
。包含的ObjectName
是name
, 且所包含的类名是
。getMBeanInfo(name)
.getClassName() - 抛出:
-
InstanceNotFoundException
- 如果指定的 MBean 未在该 MBean 服务器中注册。