- 所有超接口:
-
MBeanServerConnection
- 所有已知子接口:
-
MBeanServerForwarder
这是代理端MBean操作的接口。它包含了创建、注册和删除MBean所需的方法,以及已注册MBean的访问方法。这是JMX基础设施的核心组件。
用户代码通常不会实现此接口。相反,实现此接口的对象是通过MBeanServerFactory类中的方法之一获取的。
每个添加到MBean服务器的MBean都变得可管理:其属性和操作通过连接到该MBean服务器的连接器/适配器变得可以远程访问。除非是符合JMX规范的MBean,否则无法将Java对象注册到MBean服务器中。
当在MBean服务器中注册或注销MBean时,会发出一个MBeanServerNotification通知。要将对象注册为MBeanServerNotifications的侦听器,应调用MBean服务器方法addNotificationListener,其中ObjectName是MBeanServerDelegate的ObjectName。这个ObjectName是:JMImplementation:type=MBeanServerDelegate。
从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, null, "queryMBeans")。此外,对于每个匹配name的MBeann,如果调用者的权限不包含MBeanPermission(className, null, n, "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, null, "getDomains")。此外,对于返回数组中的每个域d,如果调用者的权限不包含MBeanPermission(null, null, new ObjectName("d:x=x"), "getDomains"),则该域将从数组中消除。这里,x=x是任何key=value对,用于满足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"),其中className是要实例化的类的名称。 -
对于
registerMBean方法,调用者的权限必须包含MBeanPermission(className, null, name, "registerMBean")。如果
MBeanPermission检查成功,则通过检查MBean的类来验证其ProtectionDomain是否意味着MBeanTrustPermission("register")。最后,如果
name参数为null,则使用MBeanRegistration.preRegister返回的ObjectName进行另一个MBeanPermission检查。 -
对于
createMBean方法,调用者的权限必须包含等效instantiate后跟registerMBean所需的权限。 -
对于
unregisterMBean方法,调用者的权限必须包含MBeanPermission(className, null, name, "unregisterMBean")。
- 自JDK版本:
- 1.5
-
Method Summary
Modifier and TypeMethodDescriptionvoidaddNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) 向已注册的MBean添加监听器。voidaddNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) 向已注册的MBean添加监听器。createMBean(String className, ObjectName name) 在MBean服务器中实例化并注册MBean。createMBean(String className, ObjectName name, Object[] params, String[] signature) 在MBean服务器中实例化并注册MBean。createMBean(String className, ObjectName name, ObjectName loaderName) 在MBean服务器中实例化并注册MBean。createMBean(String className, ObjectName name, ObjectName loaderName, Object[] params, String[] signature) 在MBean服务器中实例化并注册MBean。default ObjectInputStreamdeserialize(String className, byte[] data) 已弃用。default ObjectInputStreamdeserialize(String className, ObjectName loaderName, byte[] data) 已弃用。使用getClassLoader来获取用于反序列化的类加载器。default ObjectInputStreamdeserialize(ObjectName name, byte[] data) 已弃用。使用getClassLoaderFor来获取适当的类加载器进行反序列化。getAttribute(ObjectName name, String attribute) 获取命名MBean的特定属性的值。getAttributes(ObjectName name, String[] attributes) 检索命名MBean的多个属性的值。getClassLoader(ObjectName loaderName) 返回命名的ClassLoader。getClassLoaderFor(ObjectName mbeanName) 返回用于加载命名MBean类的ClassLoader。返回此MBeanServer的ClassLoaderRepository。返回用于命名MBean的默认域。String[]返回当前注册任何MBean的域的列表。返回MBean服务器中注册的MBean数量。getMBeanInfo(ObjectName name) 此方法发现MBean为管理公开的属性和操作。getObjectInstance(ObjectName name) 获取在MBean服务器中注册的给定MBean的ObjectInstance。instantiate(String className) 使用MBean服务器的ClassLoader Repository中注册的所有类加载器列表实例化对象。instantiate(String className, Object[] params, String[] signature) 使用MBean服务器的ClassLoader Repository中注册的所有类加载器列表实例化对象。instantiate(String className, ObjectName loaderName) 使用其ObjectName指定的类加载器实例化对象。instantiate(String className, ObjectName loaderName, Object[] params, String[] signature) 实例化对象。invoke(ObjectName name, String operationName, Object[] params, String[] signature) 在MBean上调用操作。booleanisInstanceOf(ObjectName name, String className) 如果指定的MBean是指定类的实例,则返回true,否则返回false。booleanisRegistered(ObjectName name) 检查标识为其对象名称的MBean是否已在MBean服务器中注册。queryMBeans(ObjectName name, QueryExp query) 获取MBean服务器控制的MBean。queryNames(ObjectName name, QueryExp query) 获取MBean服务器控制的MBean的名称。registerMBean(Object object, ObjectName name) 将现有对象注册为MBean到MBean服务器。voidremoveNotificationListener(ObjectName name, NotificationListener listener) 从已注册的MBean中删除监听器。voidremoveNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) 从已注册的MBean中删除监听器。voidremoveNotificationListener(ObjectName name, ObjectName listener) 从已注册的MBean中删除监听器。voidremoveNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) 从已注册的MBean中删除监听器。voidsetAttribute(ObjectName name, Attribute attribute) 设置命名MBean的特定属性的值。setAttributes(ObjectName name, AttributeList attributes) 设置命名MBean的多个属性的值。voidunregisterMBean(ObjectName name) 从MBean服务器中注销MBean。
-
Method Details
-
createMBean
ObjectInstance createMBean(String className, ObjectName name) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException 在MBean服务器中实例化并注册MBean。MBean服务器将使用其
默认加载器存储库来加载MBean的类。与MBean关联一个对象名称。如果给定的对象名称为null,则MBean必须通过实现MBeanRegistration接口并从preRegister方法返回名称来提供自己的名称。此方法等效于
createMBean(className, name, (Object[]) null, (String[]) null)。如果此方法成功创建MBean,则会发送如上所述的通知。
- 指定者:
-
createMBean在接口MBeanServerConnection - 参数:
-
className- 要实例化的MBean的类名。 -
name- MBean的对象名称。可能为null。 - 返回:
-
一个
ObjectInstance,包含新实例化的MBean的ObjectName和Java类名。如果包含的ObjectName为n,则包含的Java类名为。getMBeanInfo(n).getClassName() - 抛出:
-
RuntimeOperationsException- 封装了java.lang.IllegalArgumentException:传递的className为null,传递的ObjectName包含模式或未为MBean指定ObjectName。 -
RuntimeMBeanException- 如果MBean的构造函数或其preRegister或postRegister方法抛出RuntimeException。如果MBean的postRegister(MBeanRegistration接口)方法抛出RuntimeException,createMBean方法将抛出RuntimeMBeanException,尽管MBean的创建和注册成功。在这种情况下,实际上将注册MBean,即使createMBean方法抛出异常。请注意,RuntimeMBeanException也可以由preRegister抛出,在这种情况下,MBean将不会被注册。 -
RuntimeErrorException- 如果MBean的postRegister(MBeanRegistration接口)方法抛出Error,createMBean方法将抛出RuntimeErrorException,尽管MBean的创建和注册成功。在这种情况下,实际上将注册MBean,即使createMBean方法抛出异常。请注意,RuntimeErrorException也可以由preRegister抛出,在这种情况下,MBean将不会被注册。 -
ReflectionException- 封装了java.lang.ClassNotFoundException或在尝试调用MBean的构造函数时发生的java.lang.Exception。 -
InstanceAlreadyExistsException- MBean已经在MBean服务器的控制下。 -
MBeanRegistrationException- MBean的preRegister(MBeanRegistration接口)方法抛出异常。MBean将不会被注册。 -
MBeanException- MBean的构造函数抛出异常 -
NotCompliantMBeanException- 此类不是符合JMX标准的MBean - 参见:
-
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)。如果此方法成功创建MBean,则会发送如上所述的通知。
- 指定者:
-
createMBean在接口MBeanServerConnection中指定 - 参数:
-
className- 要实例化的MBean的类名。 -
name- MBean的对象名称。可以为null。 -
loaderName- 要使用的类加载器的对象名称。 - 返回值:
-
一个
ObjectInstance,包含新实例化的MBean的ObjectName和Java类名。如果包含的ObjectName是n,则包含的Java类名是。getMBeanInfo(n).getClassName() - 抛出:
-
RuntimeOperationsException- 封装了一个java.lang.IllegalArgumentException:传入参数的className为null,传入参数的ObjectName包含模式,或者未为MBean指定ObjectName。 -
RuntimeMBeanException- 如果MBean的构造函数或其preRegister或postRegister方法抛出RuntimeException。如果MBean的postRegister(MBeanRegistration接口)方法抛出RuntimeException,createMBean方法将抛出RuntimeMBeanException,尽管MBean的创建和注册成功。在这种情况下,即使createMBean方法抛出异常,MBean实际上也将被注册。请注意,RuntimeMBeanException也可以由preRegister抛出,在这种情况下,MBean将不会被注册。 -
RuntimeErrorException- 如果MBean的postRegister(MBeanRegistration接口)方法抛出Error,createMBean方法将抛出RuntimeErrorException,尽管MBean的创建和注册成功。在这种情况下,即使createMBean方法抛出异常,MBean实际上也将被注册。请注意,RuntimeErrorException也可以由preRegister抛出,在这种情况下,MBean将不会被注册。 -
ReflectionException- 封装了一个java.lang.ClassNotFoundException或在尝试调用MBean的构造函数时发生的java.lang.Exception。 -
InstanceAlreadyExistsException- 该MBean已经受MBean服务器控制。 -
MBeanRegistrationException- MBean的preRegister(MBeanRegistration接口)方法抛出异常。MBean将不会被注册。 -
MBeanException- MBean的构造函数抛出异常 -
NotCompliantMBeanException- 此类不是符合JMX标准的MBean -
InstanceNotFoundException- 指定的类加载器未在MBean服务器中注册。 - 参见:
-
createMBean
ObjectInstance createMBean(String className, ObjectName name, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException 在MBean服务器中实例化并注册一个MBean。MBean服务器将使用其默认加载器存储库来加载MBean的类。一个对象名称与MBean相关联。如果给定的对象名称为null,则MBean必须通过实现MBeanRegistration接口并从preRegister方法返回名称来提供自己的名称。如果此方法成功创建一个MBean,则会发送如上所述的通知。
- 指定者:
-
createMBean在接口MBeanServerConnection中指定 - 参数:
-
className- 要实例化的MBean的类名。 -
name- MBean的对象名称。可以为null。 -
params- 包含要调用的构造函数的参数的数组。 -
signature- 包含要调用的构造函数的签名的数组。 - 返回值:
-
一个
ObjectInstance,包含新实例化的MBean的ObjectName和Java类名。如果包含的ObjectName是n,则包含的Java类名是。getMBeanInfo(n).getClassName() - 抛出:
-
RuntimeOperationsException- 封装了一个java.lang.IllegalArgumentException:传入参数的className为null,传入参数的ObjectName包含模式,或者未为MBean指定ObjectName。 -
RuntimeMBeanException- 如果MBean的构造函数或其preRegister或postRegister方法抛出RuntimeException。如果MBean的postRegister(MBeanRegistration接口)方法抛出RuntimeException,createMBean方法将抛出RuntimeMBeanException,尽管MBean的创建和注册成功。在这种情况下,即使createMBean方法抛出异常,MBean实际上也将被注册。请注意,RuntimeMBeanException也可以由preRegister抛出,在这种情况下,MBean将不会被注册。 -
RuntimeErrorException- 如果MBean的postRegister(MBeanRegistration接口)方法抛出Error,createMBean方法将抛出RuntimeErrorException,尽管MBean的创建和注册成功。在这种情况下,即使createMBean方法抛出异常,MBean实际上也将被注册。请注意,RuntimeErrorException也可以由preRegister抛出,在这种情况下,MBean将不会被注册。 -
ReflectionException- 封装了一个java.lang.ClassNotFoundException或在尝试调用MBean的构造函数时发生的java.lang.Exception。 -
InstanceAlreadyExistsException- 该MBean已经受MBean服务器控制。 -
MBeanRegistrationException- MBean的preRegister(MBeanRegistration接口)方法抛出异常。MBean将不会被注册。 -
MBeanException- MBean的构造函数抛出异常 -
NotCompliantMBeanException- 此类不是符合JMX标准的MBean - 参见:
-
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方法返回名称来提供自己的名称。如果此方法成功创建一个MBean,则会发送如上所述的通知。
- 指定者:
-
createMBean在接口MBeanServerConnection中指定 - 参数:
-
className- 要实例化的MBean的类名。 -
name- MBean的对象名称。可以为null。 -
loaderName- 要使用的类加载器的对象名称。 -
params- 包含要调用的构造函数的参数的数组。 -
signature- 包含要调用的构造函数的签名的数组。 - 返回:
-
一个
ObjectInstance,包含新实例化的MBean的ObjectName和Java类名。如果包含的ObjectName是n,则包含的Java类名是。getMBeanInfo(n).getClassName() - 抛出:
-
RuntimeOperationsException- 封装了一个java.lang.IllegalArgumentException:传入参数的类名为null,传入参数的ObjectName包含模式或未为MBean指定ObjectName。 -
RuntimeMBeanException- MBean的构造函数或其preRegister或postRegister方法抛出了RuntimeException。如果MBean的postRegister(MBeanRegistration接口)方法抛出RuntimeException,createMBean方法将抛出RuntimeMBeanException,尽管MBean的创建和注册成功。在这种情况下,即使createMBean方法抛出异常,MBean实际上也将被注册。请注意,RuntimeMBeanException也可以由preRegister抛出,在这种情况下,MBean将不会被注册。 -
RuntimeErrorException- 如果MBean的postRegister(MBeanRegistration接口)方法抛出Error,createMBean方法将抛出RuntimeErrorException,尽管MBean的创建和注册成功。在这种情况下,即使createMBean方法抛出异常,MBean实际上也将被注册。请注意,RuntimeErrorException也可以由preRegister抛出,在这种情况下,MBean将不会被注册。 -
ReflectionException- 封装了一个java.lang.ClassNotFoundException或在尝试调用MBean的构造函数时发生的java.lang.Exception。 -
InstanceAlreadyExistsException- MBean已经受MBean服务器控制。 -
MBeanRegistrationException- MBean的preRegister(MBeanRegistration接口)方法抛出了异常。MBean将不会被注册。 -
MBeanException- MBean的构造函数抛出了异常 -
NotCompliantMBeanException- 此类不是符合JMX标准的MBean -
InstanceNotFoundException- 指定的类加载器未在MBean服务器中注册。 - 参见:
-
registerMBean
ObjectInstance registerMBean(Object object, ObjectName name) throws InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException 将现有对象注册为MBean与MBean服务器。如果给定的对象名称为null,则MBean必须通过实现
MBeanRegistration接口并从preRegister方法返回名称来提供自己的名称。如果此方法成功注册MBean,则将发送如上所述的通知。
- 参数:
-
object- 要注册为MBean的MBean。 -
name- MBean的对象名称。可以为null。 - 返回:
-
一个
ObjectInstance,包含新注册的MBean的ObjectName和Java类名。如果包含的ObjectName是n,则包含的Java类名是。getMBeanInfo(n).getClassName() - 抛出:
-
InstanceAlreadyExistsException- MBean已经受MBean服务器控制。 -
MBeanRegistrationException- MBean的preRegister(MBeanRegistration接口)方法抛出了异常。MBean将不会被注册。 -
RuntimeMBeanException- 如果MBean的postRegister(MBeanRegistration接口)方法抛出RuntimeException,registerMBean方法将抛出RuntimeMBeanException,尽管MBean注册成功。在这种情况下,即使registerMBean方法抛出异常,MBean实际上也将被注册。请注意,RuntimeMBeanException也可以由preRegister抛出,在这种情况下,MBean将不会被注册。 -
RuntimeErrorException- 如果MBean的postRegister(MBeanRegistration接口)方法抛出Error,registerMBean方法将抛出RuntimeErrorException,尽管MBean注册成功。在这种情况下,即使registerMBean方法抛出异常,MBean实际上也将被注册。请注意,RuntimeErrorException也可以由preRegister抛出,在这种情况下,MBean将不会被注册。 -
NotCompliantMBeanException- 此对象不是符合JMX标准的MBean -
RuntimeOperationsException- 封装了一个java.lang.IllegalArgumentException:传入参数的对象为null或未指定对象名称。 - 参见:
-
unregisterMBean
从MBean服务器中注销MBean。MBean由其对象名称标识。一旦调用了该方法,MBean将不再可以通过其对象名称访问。如果此方法成功注销MBean,则将发送如上所述的通知。
- 指定者:
-
unregisterMBean在接口MBeanServerConnection中指定 - 参数:
-
name- 要注销的MBean的对象名称。 - 抛出:
-
RuntimeOperationsException- 封装了一个java.lang.IllegalArgumentException:参数中的对象名称为null或您尝试注销的MBean是MBeanServerDelegateMBean。 -
RuntimeMBeanException- 如果MBean的postDeregister(MBeanRegistration接口)方法抛出RuntimeException,unregisterMBean方法将抛出RuntimeMBeanException,尽管MBean注销成功。在这种情况下,即使unregisterMBean方法抛出异常,MBean实际上也将被注销。请注意,RuntimeMBeanException也可以由preDeregister抛出,在这种情况下,MBean将保持注册状态。 -
RuntimeErrorException- 如果MBean的postDeregister(MBeanRegistration接口)方法抛出Error,unregisterMBean方法将抛出RuntimeErrorException,尽管MBean注销成功。在这种情况下,即使unregisterMBean方法抛出异常,MBean实际上也将被注销。请注意,RuntimeMBeanException也可以由preDeregister抛出,在这种情况下,MBean将保持注册状态。 -
InstanceNotFoundException- 指定的MBean未在MBean服务器中注册。 -
MBeanRegistrationException- MBean的preDeregister(MBeanRegistration接口)方法抛出了异常。 - 参见:
-
getObjectInstance
从接口复制的描述:MBeanServerConnection获取在MBean服务器中注册的给定MBean的ObjectInstance。- 指定者:
-
getObjectInstance在接口MBeanServerConnection中 - 参数:
-
name- MBean的对象名称。 - 返回:
-
与由name指定的MBean相关联的
ObjectInstance。包含的ObjectName是name,包含的类名是。getMBeanInfo(name).getClassName() - 抛出:
-
InstanceNotFoundException- 指定的MBean未在MBean服务器中注册。
-
queryMBeans
获取MBean服务器控制的MBeans。此方法允许获取以下任何内容:所有MBeans,由ObjectName的模式匹配和/或查询表达式指定的一组MBeans,特定的MBean。当对象名称为null或未指定域和关键属性时,将选择所有对象(如果指定了查询,则将进行过滤)。它返回所选MBeans的ObjectInstance对象集(包含ObjectName和Java类名)。- 指定者:
-
queryMBeans在接口MBeanServerConnection中 - 参数:
-
name- 用于检索MBeans的对象名称模式。如果为null或未指定域和关键属性,则将检索所有已注册的MBeans。 -
query- 用于选择MBeans的查询表达式。如果为null,则不会应用查询表达式以选择MBeans。 - 返回:
-
包含所选MBeans的
ObjectInstance对象的集合。如果没有MBean满足查询条件,则返回一个空列表。
-
queryNames
获取MBean服务器控制的MBeans的名称。此方法允许获取以下任何内容:所有MBeans的名称,由ObjectName的模式匹配和/或查询表达式指定的一组MBeans的名称,特定MBean的名称(相当于测试MBean是否已注册)。当对象名称为null或未指定域和关键属性时,将选择所有对象(如果指定了查询,则将进行过滤)。它返回所选MBeans的ObjectNames集合。- 指定者:
-
queryNames在接口MBeanServerConnection中 - 参数:
-
name- 用于检索MBean名称的对象名称模式。如果为null或未指定域和关键属性,则将检索所有已注册的MBean的名称。 -
query- 用于选择MBeans的查询表达式。如果为null,则不会应用查询表达式以选择MBeans。 - 返回:
- 包含所选MBeans的ObjectNames集合。如果没有MBean满足查询条件,则返回一个空列表。
-
isRegistered
从接口复制的描述:MBeanServerConnection检查由其对象名称标识的MBean是否已在MBean服务器中注册。- 指定者:
-
isRegistered在接口MBeanServerConnection中 - 参数:
-
name- 要检查的MBean的对象名称。 - 返回:
- 如果MBean已在MBean服务器中注册,则为true;否则为false。
- 抛出:
-
RuntimeOperationsException- 封装了一个java.lang.IllegalArgumentException:参数中的对象名称为null。
-
getMBeanCount
Integer getMBeanCount()返回MBean服务器中注册的MBean数量。- 指定者:
-
getMBeanCount在接口MBeanServerConnection中 - 返回:
- 注册的MBean数量,封装在一个Integer中。如果调用者的权限受限,则此数字可能大于调用者可以访问的MBean数量。
-
getAttribute
Object getAttribute(ObjectName name, String attribute) throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException 从接口复制的描述:MBeanServerConnection获取命名MBean的特定属性的值。MBean由其对象名称标识。- 指定者:
-
getAttribute在接口MBeanServerConnection中 - 参数:
-
name- 要检索属性的MBean的对象名称。 -
attribute- 指定要检索的属性的名称的字符串。 - 返回:
- 检索属性的值。
- 抛出:
-
RuntimeOperationsException- 封装了一个java.lang.IllegalArgumentException:参数中的对象名称为null或参数中的属性为null。 -
MBeanException- 封装了MBean的getter引发的异常。 -
AttributeNotFoundException- 指定的属性在MBean中不可访问。 -
InstanceNotFoundException- 指定的MBean未在MBean服务器中注册。 -
ReflectionException- 封装了在尝试调用setter时抛出的java.lang.Exception。 - 参见:
-
getAttributes
AttributeList getAttributes(ObjectName name, String[] attributes) throws InstanceNotFoundException, ReflectionException 从接口复制的描述:MBeanServerConnection检索命名MBean的多个属性的值。MBean由其对象名称标识。
如果由于某种原因无法检索一个或多个属性,则它们将从返回的
AttributeList中省略。调用者应检查列表是否与attributes数组的大小相同。要发现阻止检索给定属性的问题,调用getAttribute以获取该属性。以下是调用此方法并检查是否成功检索所有请求属性的示例:
String[] attrNames = ...; AttributeList list = mbeanServerConnection.getAttributes(objectName, attrNames); if (list.size() == attrNames.length) System.out.println("成功检索所有属性"); else {List<String>missing = newArrayList<String>(Arrays.asList(attrNames)); for (Attribute a : list.asList()) missing.remove(a.getName()); System.out.println("未检索到: " + missing); }- 指定者:
-
getAttributes在接口MBeanServerConnection中 - 参数:
-
name- 要从中检索属性的MBean的对象名称。 -
attributes- 要检索的属性列表。 - 返回:
- 检索的属性列表。
- 抛出:
-
RuntimeOperationsException- 封装了一个java.lang.IllegalArgumentException:参数中的对象名称为null或参数中的属性为null。 -
InstanceNotFoundException- 指定的MBean未在MBean服务器中注册。 -
ReflectionException- 在尝试调用Dynamic MBean的getAttributes方法时发生异常。 - 参见:
-
setAttribute
void setAttribute(ObjectName name, Attribute attribute) throws InstanceNotFoundException, AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException 从接口复制的描述:MBeanServerConnection设置命名MBean的特定属性的值。MBean由其对象名称标识。- 指定者:
-
setAttribute在接口MBeanServerConnection中指定 - 参数:
-
name- 要设置属性的MBean的名称。 -
attribute- 要设置的属性的标识和要设置的值。 - 抛出:
-
RuntimeOperationsException- 包装了一个java.lang.IllegalArgumentException:参数中的对象名称为null或参数中的属性为null。 -
InstanceNotFoundException- 指定的MBean未在MBean服务器中注册。 -
AttributeNotFoundException- 指定的属性在MBean中不可访问。 -
InvalidAttributeValueException- 指定的属性值无效。 -
MBeanException- 包装了MBean的setter抛出的异常。 -
ReflectionException- 包装了一个java.lang.Exception,该异常在尝试调用setter时抛出。 - 参见:
-
setAttributes
AttributeList setAttributes(ObjectName name, AttributeList attributes) throws InstanceNotFoundException, ReflectionException 从接口复制的描述:MBeanServerConnection设置命名MBean的多个属性的值。通过其对象名称标识MBean。
如果由于某种原因无法设置一个或多个属性,则它们将从返回的
AttributeList中省略。调用者应检查输入AttributeList与输出AttributeList的大小是否相同。要发现阻止检索给定属性的问题,通常可以调用setAttribute来设置该属性,尽管不能保证这样做会起作用。(例如,两个属性的值可能被拒绝,因为它们与彼此不一致。仅允许设置其中一个可能被允许。)以下是调用此方法并检查是否成功设置所有请求属性的示例:
AttributeList inputAttrs = ...; AttributeList outputAttrs = mbeanServerConnection.setAttributes(objectName, inputAttrs); if (inputAttrs.size() == outputAttrs.size()) System.out.println("所有属性均已成功设置"); else {List<String>missing = newArrayList<String>(); for (Attribute a : inputAttrs.asList()) missing.add(a.getName()); for (Attribute a : outputAttrs.asList()) missing.remove(a.getName()); System.out.println("未设置的属性: " + missing); }- 指定者:
-
setAttributes在接口MBeanServerConnection中指定 - 参数:
-
name- 要设置属性的MBean的对象名称。 -
attributes- 属性列表:要设置的属性的标识和要设置的值。 - 返回:
- 已设置的属性列表及其新值。
- 抛出:
-
RuntimeOperationsException- 包装了一个java.lang.IllegalArgumentException:参数中的对象名称为null或参数中的属性为null。 -
InstanceNotFoundException- 指定的MBean未在MBean服务器中注册。 -
ReflectionException- 尝试调用Dynamic MBean的getAttributes方法时发生异常。 - 参见:
-
invoke
Object invoke(ObjectName name, String operationName, Object[] params, String[] signature) throws InstanceNotFoundException, MBeanException, ReflectionException 从接口复制的描述:MBeanServerConnection调用MBean上的操作。
由于需要一个
signature来区分可能重载的操作,因此最好通过MBean代理来调用操作。例如,假设您有一个标准MBean接口如下:public interface FooMBean { public int countMatches(String[] patterns, boolean ignoreCase); }可以如下调用
countMatches操作:String[] myPatterns = ...; int count = (Integer) mbeanServerConnection.invoke( objectName, "countMatches", new Object[] {myPatterns, true}, new String[] {String[].class.getName(), boolean.class.getName()});或者,可以通过代理进行调用:
String[] myPatterns = ...; FooMBean fooProxy = JMX.newMBeanProxy( mbeanServerConnection, objectName, FooMBean.class); int count = fooProxy.countMatches(myPatterns, true);- 指定者:
-
invoke在接口MBeanServerConnection中指定 - 参数:
-
name- 要调用方法的MBean的对象名称。 -
operationName- 要调用的操作的名称。 -
params- 包含在调用操作时要设置的参数的数组 -
signature- 包含操作的签名的数组,格式为Class.getName()返回的格式。类对象将使用与调用操作的MBean相同的类加载器加载。 - 返回:
- 操作返回的对象,表示在指定的MBean上调用操作的结果。
- 抛出:
-
InstanceNotFoundException- 指定的MBean未在MBean服务器中注册。 -
MBeanException- 包装了MBean的调用方法抛出的异常。 -
ReflectionException- 包装了一个java.lang.Exception,在尝试调用方法时抛出。
-
getDefaultDomain
String getDefaultDomain()从接口复制的描述:MBeanServerConnection返回用于命名MBean的默认域。如果用户未指定域,则默认域名称将用作MBean的ObjectName中的域部分。- 指定者:
-
getDefaultDomain在接口MBeanServerConnection中指定 - 返回:
- 默认域。
-
getDomains
String[] getDomains()从接口复制的描述:MBeanServerConnection返回当前注册任何MBean的域列表。仅当至少有一个MBean注册,并且其
getDomain()等于该字符串时,返回的数组中才有一个字符串。返回的数组中字符串的顺序未定义。- 指定者:
-
getDomains在接口MBeanServerConnection中指定 - 返回:
- 域列表。
-
addNotificationListener
void addNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException 向已注册的MBean添加侦听器。由MBean发出的通知将转发给侦听器。
如果通知的源是对MBean对象的引用,则MBean服务器将用该MBean的ObjectName替换它。否则,源保持不变。- 指定者:
-
addNotificationListener在接口MBeanServerConnection中 - 参数:
-
name- 应向其添加监听器的MBean的名称。 -
listener- 将处理由注册的MBean发出的通知的监听器对象。 -
filter- 过滤器对象。如果filter为null,则在处理通知之前不会执行任何过滤。 -
handback- 在发出通知时要发送给监听器的上下文。 - 抛出:
-
InstanceNotFoundException- 提供的MBean名称与注册的任何MBean都不匹配。 - 参见:
-
addNotificationListener
void addNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException 向已注册的MBean添加监听器。
MBean发出的通知将由MBeanServer转发给监听器。如果通知的来源是对MBean对象的引用,则MBean服务器将用该MBean的ObjectName替换它。否则,来源保持不变。
接收通知的监听器对象是在调用此方法时使用给定名称注册的对象。即使随后取消注册,它仍将继续接收通知。
- 指定者:
-
addNotificationListener在接口MBeanServerConnection中 - 参数:
-
name- 应向其添加监听器的MBean的名称。 -
listener- 将处理由注册的MBean发出的通知的监听器对象的名称。 -
filter- 过滤器对象。如果filter为null,则在处理通知之前不会执行任何过滤。 -
handback- 在发出通知时要发送给监听器的上下文。 - 抛出:
-
RuntimeOperationsException- 包装了一个IllegalArgumentException。由listener命名的MBean存在,但未实现NotificationListener接口。 -
InstanceNotFoundException- 通知监听器或通知广播器的MBean名称与注册的任何MBean都不匹配。 - 参见:
-
removeNotificationListener
void removeNotificationListener(ObjectName name, ObjectName listener) throws InstanceNotFoundException, ListenerNotFoundException 从接口复制的描述:MBeanServerConnection从已注册的MBean中删除监听器。如果监听器注册了多次,可能使用不同的过滤器或回调函数,此方法将删除所有这些注册。
- 指定者:
-
removeNotificationListener在接口MBeanServerConnection中 - 参数:
-
name- 应从中删除监听器的MBean的名称。 -
listener- 要删除的监听器的对象名称。 - 抛出:
-
InstanceNotFoundException- 提供的MBean名称与注册的任何MBean都不匹配。 -
ListenerNotFoundException- 该监听器未在MBean中注册。 - 参见:
-
removeNotificationListener
void removeNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, ListenerNotFoundException 从接口复制的描述:MBeanServerConnection从已注册的MBean中删除监听器。
MBean必须具有与给定的
listener、filter和handback参数完全匹配的监听器。如果存在多个这样的监听器,则仅删除一个。如果要删除的监听器中
filter和handback参数为null,则这两个参数只能在要删除的监听器中为null。- 指定者:
-
removeNotificationListener在接口MBeanServerConnection中 - 参数:
-
name- 应从中删除监听器的MBean的名称。 -
listener- 要删除的监听器的对象名称。 -
filter- 添加监听器时指定的过滤器。 -
handback- 添加监听器时指定的handback。 - 抛出:
-
InstanceNotFoundException- 提供的MBean名称与注册的任何MBean都不匹配。 -
ListenerNotFoundException- 该监听器未在MBean中注册,或者未使用给定的过滤器和handback注册。 - 参见:
-
removeNotificationListener
void removeNotificationListener(ObjectName name, NotificationListener listener) throws InstanceNotFoundException, ListenerNotFoundException 从接口复制的描述:MBeanServerConnection从已注册的MBean中删除监听器。
如果监听器注册了多次,可能使用不同的过滤器或回调函数,此方法将删除所有这些注册。
- 指定者:
-
removeNotificationListener在接口MBeanServerConnection中 - 参数:
-
name- 应从中删除监听器的MBean的名称。 -
listener- 要删除的监听器。 - 抛出:
-
InstanceNotFoundException- 提供的MBean名称与注册的任何MBean都不匹配。 -
ListenerNotFoundException- 该监听器未在MBean中注册。 - 参见:
-
removeNotificationListener
void removeNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, ListenerNotFoundException 从接口复制的描述:MBeanServerConnection从已注册的MBean中删除监听器。
MBean必须具有与给定的
listener、filter和handback参数完全匹配的监听器。如果存在多个这样的监听器,则仅删除一个。如果要删除的监听器中
filter和handback参数为null,则这两个参数只能在要删除的监听器中为null。- 指定者:
-
removeNotificationListener在接口MBeanServerConnection中 - 参数:
-
name- 应从中删除监听器的MBean的名称。 -
listener- 要删除的监听器。 -
filter- 在添加监听器时指定的过滤器。 -
handback- 在添加监听器时指定的handback。 - 抛出:
-
InstanceNotFoundException- 提供的MBean名称与注册的任何MBean都不匹配。 -
ListenerNotFoundException- 该监听器未在MBean中注册,或者未使用给定的过滤器和handback注册。 - 参见:
-
getMBeanInfo
MBeanInfo getMBeanInfo(ObjectName name) throws InstanceNotFoundException, IntrospectionException, ReflectionException 从接口中复制的描述:MBeanServerConnection该方法发现MBean为管理公开的属性和操作。- 指定者:
-
getMBeanInfo在接口MBeanServerConnection中 - 参数:
-
name- 要分析的MBean的名称 - 返回:
-
一个
MBeanInfo实例,允许检索此MBean的所有属性和操作。 - 抛出:
-
InstanceNotFoundException- 未找到指定的MBean。 -
IntrospectionException- 在内省期间发生异常。 -
ReflectionException- 尝试调用动态MBean的getMBeanInfo时发生异常。
-
isInstanceOf
从接口中复制的描述:MBeanServerConnection如果指定的MBean是指定类的实例,则返回true,否则返回false。
如果
name不是MBean的名称,则此方法会抛出InstanceNotFoundException异常。否则,让
X为name命名的MBean,
L为X的ClassLoader,
N为X的MBeanInfo中的类名。如果N等于
className,则结果为true。否则,如果L成功加载
className并且X是此类的实例,则结果为true。否则,如果L成功加载N和
className,并且第二个类可从第一个类分配,则结果为true。否则,结果为false。
- 指定者:
-
isInstanceOf在接口MBeanServerConnection中 - 参数:
-
name- MBean的ObjectName。 -
className- 类的名称。 - 返回:
- 如果根据上述规则指定的MBean是指定类的实例,则返回true,否则返回false。
- 抛出:
-
InstanceNotFoundException- 指定的MBean未在MBean服务器中注册。 - 参见:
-
instantiate
使用MBean服务器的
ClassLoader Repository中注册的所有类加载器实例化对象。对象的类应具有公共构造函数。此方法返回对新创建对象的引用。新创建的对象未在MBean服务器中注册。此方法等效于
instantiate(className, (Object[]) null, (String[]) null)。- 参数:
-
className- 要实例化的对象的类名。 - 返回:
- 新实例化的对象。
- 抛出:
-
ReflectionException- 封装了java.lang.ClassNotFoundException或在尝试调用对象构造函数时发生的java.lang.Exception。 -
MBeanException- 对象的构造函数引发了异常 -
RuntimeOperationsException- 封装了java.lang.IllegalArgumentException:传递的参数className为null。
-
instantiate
Object instantiate(String className, ObjectName loaderName) throws ReflectionException, MBeanException, InstanceNotFoundException 使用由其
ObjectName标识的类加载器实例化对象。如果加载器名称为null,则将使用加载MBean服务器的ClassLoader。对象的类应具有公共构造函数。此方法返回对新创建对象的引用。新创建的对象未在MBean服务器中注册。此方法等效于
instantiate(className, loaderName, (Object[]) null, (String[]) null)。- 参数:
-
className- 要实例化的MBean的类名。 -
loaderName- 要使用的类加载器的对象名称。 - 返回:
- 新实例化的对象。
- 抛出:
-
ReflectionException- 封装了java.lang.ClassNotFoundException或在尝试调用对象构造函数时发生的java.lang.Exception。 -
MBeanException- 对象的构造函数引发了异常。 -
InstanceNotFoundException- 指定的类加载器未在MBeanServer中注册。 -
RuntimeOperationsException- 封装了java.lang.IllegalArgumentException:传递的参数className为null。
-
instantiate
Object instantiate(String className, Object[] params, String[] signature) throws ReflectionException, MBeanException 使用MBean服务器
ClassLoader Repository中注册的所有类加载器实例化对象。对象的类应具有公共构造函数。调用返回对新创建对象的引用。新创建的对象未在MBean服务器中注册。- 参数:
-
className- 要实例化的对象的类名。 -
params- 包含要调用的构造函数的参数的数组。 -
signature- 包含要调用的构造函数的签名的数组。 - 返回:
- 新实例化的对象。
- 抛出:
-
ReflectionException- 封装了java.lang.ClassNotFoundException或在尝试调用对象构造函数时发生的java.lang.Exception。 -
MBeanException- 对象的构造函数引发了异常 -
RuntimeOperationsException- 封装了java.lang.IllegalArgumentException:传递的参数className为null。
-
instantiate
Object instantiate(String className, ObjectName loaderName, Object[] params, String[] signature) throws ReflectionException, MBeanException, InstanceNotFoundException 实例化对象。要使用的类加载器由其对象名称标识。如果加载器的对象名称为null,则将使用加载MBean服务器的ClassLoader。对象的类应具有公共构造函数。调用返回对新创建对象的引用。新创建的对象未在MBean服务器中注册。
- 参数:
-
className- 要实例化的对象的类名。 -
loaderName- 要使用的类加载器的对象名称。 -
params- 包含要调用的构造函数的参数的数组。 -
signature- 包含要调用的构造函数的签名的数组。 - 返回:
- 新实例化的对象。
- 抛出:
-
ReflectionException- 包装了一个java.lang.ClassNotFoundException或在尝试调用对象的构造函数时发生的java.lang.Exception。 -
MBeanException- 对象的构造函数抛出异常 -
InstanceNotFoundException- 指定的类加载器未在MBean服务器中注册。 -
RuntimeOperationsException- 包装了一个java.lang.IllegalArgumentException:传入参数中的className为null。
-
deserialize
@Deprecated(since="1.5") default ObjectInputStream deserialize(ObjectName name, byte[] data) throws InstanceNotFoundException, OperationsException Deprecated.UsegetClassLoaderForto obtain the appropriate class loader for deserialization.在MBean的类加载器上下文中对字节数组进行反序列化。
- 实现要求:
-
默认情况下,此方法会抛出
UnsupportedOperationException。 - 参数:
-
name- 应该用于反序列化的MBean的名称。 -
data- 要反序列化的字节数组。 - 返回:
- 反序列化的对象流。
- 抛出:
-
InstanceNotFoundException- 未找到指定的MBean。 -
OperationsException- 任何常见的输入/输出相关异常。
-
deserialize
@Deprecated(since="1.5") default ObjectInputStream deserialize(String className, byte[] data) throws OperationsException, ReflectionException Deprecated.UsegetClassLoaderRepository()to obtain the class loader repository and use it to deserialize.在给定MBean类加载器的上下文中对字节数组进行反序列化。通过加载类
className来找到类加载器,通过Class Loader Repository。结果类的类加载器即为要使用的类加载器。- 实现要求:
-
默认情况下,此方法会抛出
UnsupportedOperationException。 - 参数:
-
className- 应该用于反序列化的类的名称。 -
data- 要反序列化的字节数组。 - 返回:
- 反序列化的对象流。
- 抛出:
-
OperationsException- 任何常见的输入/输出相关异常。 -
ReflectionException- 无法通过类加载器存储库加载指定的类
-
deserialize
@Deprecated(since="1.5") default ObjectInputStream deserialize(String className, ObjectName loaderName, byte[] data) throws InstanceNotFoundException, OperationsException, ReflectionException Deprecated.UsegetClassLoaderto obtain the class loader for deserialization.在给定MBean类加载器的上下文中对字节数组进行反序列化。类加载器是加载名称为"className"的类的类加载器。指定用于加载指定类的类加载器的名称。如果为null,则将使用MBean服务器的类加载器。
- 实现要求:
-
默认情况下,此方法会抛出
UnsupportedOperationException。 - 参数:
-
className- 应该用于反序列化的类的名称。 -
loaderName- 用于加载指定类的类加载器的名称。如果为null,则将使用MBean服务器的类加载器。 -
data- 要反序列化的字节数组。 - 返回:
- 反序列化的对象流。
- 抛出:
-
InstanceNotFoundException- 未找到指定的类加载器MBean。 -
OperationsException- 任何常见的输入/输出相关异常。 -
ReflectionException- 无法通过指定的类加载器加载指定的类。
-
getClassLoaderFor
返回用于加载命名MBean类的
ClassLoader。- 参数:
-
mbeanName- MBean的ObjectName。 - 返回:
-
用于该MBean的ClassLoader。如果l是MBean的实际ClassLoader,r是返回的值,则要么:
- r与l相同;或
- r
.loadClass(s)的结果与l.loadClass(s)对于任何字符串s相同。
- 抛出:
-
InstanceNotFoundException- 如果未找到命名的MBean。
-
getClassLoader
返回命名的
ClassLoader。- 参数:
-
loaderName- ClassLoader的ObjectName。可能为null,在这种情况下返回MBean服务器自己的ClassLoader。 - 返回:
-
命名的ClassLoader。如果l是具有该名称的实际ClassLoader,r是返回的值,则要么:
- r与l相同;或
- r
.loadClass(s)的结果与l.loadClass(s)对于任何字符串s相同。
- 抛出:
-
InstanceNotFoundException- 如果未找到命名的ClassLoader。
-
getClassLoaderRepository
ClassLoaderRepository getClassLoaderRepository()返回此MBeanServer的ClassLoaderRepository。
- 返回:
- 此MBeanServer的ClassLoaderRepository。
-
getClassLoaderRepository()来获取类加载器存储库,并用它来进行反序列化。