java.lang.Object javax.management.MBeanServerInvocationHandler
public class MBeanServerInvocationHandler
通过 MBean 服务器将 MBean 的管理接口中的方法转发到 MBean 的 InvocationHandler
。
在给出 MBeanServerConnection
、MBean 服务器中某个 MBean 的 ObjectName
,以及一个 Java 接口 Intf
(它使用用于 Standard MBean 或 MXBean 的模式描述 MBean 的管理接口)的情况下,可以使用此类构造 MBean 的代理。该代理实现了接口 Intf
,这样就可以通过 MBean 服务器向 MBean 转发其所有方法。
如果将 InvocationHandler
用于 MXBean,那么方法的参数会从 MXBean 接口中声明的类型转换为相应的映射类型,并将返回值从映射类型转换为声明的类型。例如,在使用了方法
public List<String> reverse(List<String> list);
并且已经知道 List<String>
的映射类型为 String[]
的情况下,调用 proxy.reverse(someList)
会将 someList
从 List<String>
转换为 String[]
,调用 MBean 操作 reverse
,然后将返回的 String[]
转换为 List<String>
。
当使用此调用处理程序对代理调用方法 Object.toString()、Object.hashCode() 和 Object.equals(Object) 时,仅当这些方法出现在一个代理接口中时,才将它们转发到 MBean 服务器。对于使用 JMX.newMBeanProxy
或 JMX.newMXBeanProxy
创建的代理而言,这意味着这些方法必须出现在 Standard MBean 或 MXBean 接口中。否则,这些方法具有以下行为:
MBeanServerInvocationHandler
是使用 Class
参数构造的,则要 equals
返回 true,另一个 MBeanServerInvocationHandler
必须是使用相同的 Class
参数构造的。
构造方法摘要 | |
---|---|
MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName) 通过 MBean 服务器将方法转发给 Standard MBean 的调用处理程序。 |
|
MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName, boolean isMXBean) 可以通过 MBean 服务器将方法转发给 Standard MBean 或 MXBean 的调用处理程序。 |
方法摘要 | ||
---|---|---|
MBeanServerConnection |
getMBeanServerConnection() MBean 服务器连接,使用此处理程序的代理的方法是通过此连接转发的。 |
|
ObjectName |
getObjectName() MBean 服务器中 MBean 的名称,一些方法将转发到该 MBean。 |
|
Object |
invoke(Object proxy, Method method, Object[] args) 在代理实例上处理方法调用并返回结果。 |
|
boolean |
isMXBean() 如果为 true,则该代理适用于 MXBean,并将适当映射应用于方法参数和返回值。 |
|
static
|
newProxyInstance(MBeanServerConnection connection, ObjectName objectName, Class<T> interfaceClass, boolean notificationBroadcaster) 返回一个代理,该代理通过将其方法从给定 MBean 服务器转发到指定 MBean 来实现给定的接口。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName)
通过 MBean 服务器将方法转发给 Standard MBean 的调用处理程序。此构造方法可能被调用,而不是依赖于 JMX.newMBeanProxy
,例如在需要为 Proxy.newProxyInstance
提供一个不同的 ClassLoader
的情况下。
此构造方法不适合 MXBean。为此请使用 MBeanServerInvocationHandler(MBeanServerConnection, ObjectName, boolean)
。此构造方法等效于 new MBeanServerInvocationHandler(connection, objectName, false)
。
connection
- MBean 服务器连接,通过此连接转发所有使用此处理程序的代理方法。
objectName
- MBean 服务器中的 MBean 名称,一些方法将转发到该 MBean。
public MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName, boolean isMXBean)
可以通过 MBean 服务器将方法转发给 Standard MBean 或 MXBean 的调用处理程序。此构造方法可能被调用,而不是依赖于 JMX.newMXBeanProxy
,例如在需要为 Proxy.newProxyInstance
提供一个不同的 ClassLoader
的情况下。
connection
- MBean 服务器连接,通过此连接转发所有使用此处理程序的代理方法。
objectName
- MBean 服务器中的 MBean 的名称,一些方法将转发到该 MBean。
isMXBean
- 如果为 true,则代理适用于
MXBean
,并且将适当映射应用于方法参数和返回值。
方法详细信息 |
---|
public MBeanServerConnection getMBeanServerConnection()
MBean 服务器连接,使用此处理程序的代理的方法是通过此连接转发的。
public ObjectName getObjectName()
MBean 服务器中 MBean 的名称,一些方法将转发到该 MBean。
public boolean isMXBean()
如果为 true,则该代理适用于 MXBean,并将适当映射应用于方法参数和返回值。
public static <T> T newProxyInstance(MBeanServerConnection connection, ObjectName objectName, Class<T> interfaceClass, boolean notificationBroadcaster)
返回一个代理,该代理通过将其方法从给定 MBean 服务器转发到指定 MBean 来实现给定的接口。从 1.6 版本开始,方法 JMX.newMBeanProxy(MBeanServerConnection, ObjectName, Class)
和 JMX.newMBeanProxy(MBeanServerConnection, ObjectName, Class, boolean)
优先于此方法。
此方法等效于 Proxy.newProxyInstance
(interfaceClass.getClassLoader(), interfaces, handler)
。其中 handler
是 new MBeanServerInvocationHandler(connection, objectName)
的结果,而 interfaces
是一个数组,如果 notificationBroadcaster
为 false,则该数组有一个元素,如果为 true,则该数组有两个元素。interfaces
的第一个元素是 interfaceClass
,第二个(如果存在)是 NotificationEmitter.class
。
T
- 允许编译器知道如果
interfaceClass
参数为
MyMBean.class
则返回类型为
MyMBean
。
connection
- 要转发到的目标 MBean 服务器。
objectName
-
connection
中的 MBean 的名称,各个方法将转发到该 MBean。
interfaceClass
- MBean 输出的管理接口,也由返回的代理来实现。
notificationBroadcaster
- 通过
connection
转发所返回代理的方法,使该代理实现
NotificationEmitter
。在该代理上调用
NotificationBroadcaster.addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
将导致对
MBeanServerConnection.addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)
的调用,对于
NotificationBroadcaster
和
NotificationEmitter
的其他方法也是如此。
JMX.newMBeanProxy(MBeanServerConnection, ObjectName, Class)
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
InvocationHandler
复制的描述
InvocationHandler
中的
invoke
proxy
- 在其上调用方法的代理实例
method
- 对应于在代理实例上调用的接口方法的
Method
实例。
Method
对象的声明类将是在其中声明方法的接口,该接口可以是代理类赖以继承方法的代理接口的超接口。
args
- 包含传入代理实例上方法调用的参数值的对象数组,如果接口方法不使用参数,则为
null
。基本类型的参数被包装在适当基本包装器类(如
java.lang.Integer
或
java.lang.Boolean
)的实例中。
null
并且接口方法的返回类型是基本类型,则代理实例上的方法调用将抛出
NullPointerException
。否则,如果此方法返回的值与上述接口方法的声明返回类型不兼容,则代理实例上的方法调用将抛出
ClassCastException
。
Throwable
- 从代理实例上的方法调用抛出的异常。该异常的类型必须可以分配到在接口方法的
throws
子句中声明的任一异常类型或未经检查的异常类型
java.lang.RuntimeException
或
java.lang.Error
。如果此方法抛出经过检查的异常,该异常不可分配到在接口方法的
throws
子句中声明的任一异常类型,代理实例的方法调用将抛出包含此方法曾抛出的异常的
UndeclaredThrowableException
。
UndeclaredThrowableException