public interface MBeanServer
这是在代理端进行 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")
。
方法摘要 | |
---|---|
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<ObjectInstance> |
queryMBeans(ObjectName name, QueryExp query) 获得该 MBean 服务器所控制的 MBean。 |
Set<ObjectName> |
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。 |
方法详细信息 |
---|
ObjectInstance createMBean(String className, ObjectName name) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException
MBeanServerConnection
复制的描述
在 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
ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException
MBeanServerConnection
复制的描述
在 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 服务器中注册指定的类加载器。
ObjectInstance createMBean(String className, ObjectName name, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException
MBeanServerConnection
复制的描述
默认的 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
ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException
MBeanServerConnection
复制的描述
MBeanRegistration
接口并从
preRegister
方法中返回名称。
MBeanServerConnection
中的
createMBean
className
- 要实例化的 MBean 的类名。
name
- 该 MBean 的对象名。可以为 null。
loaderName
- 要使用的类加载器的对象名。
params
- 一个数组,包含要调用的构造方法的参数。
signature
- 一个数组,包含要调用的构造方法的签名。
ObjectInstance
,包含新实例化的 MBean 的
ObjectName
和 Java 类名。如果包含的
ObjectName
是
n
,则所包含的 Java 类名是
getMBeanInfo(n)
.getClassName()
。
ReflectionException
- 包装在试图调用 MBean 的构造方法时所出现的
java.lang.Cla