public class MBeanServerInvocationHandler extends Object implements InvocationHandler
InvocationHandler
将MBean管理界面中的方法通过MBean服务器转发到MBean。
给定一个MBeanServerConnection
,该ObjectName
一个MBean的该MBean服务器中,并且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中出现时才转发到MBean服务器代理接口之一。 对于使用JMX.newMBeanProxy
或JMX.newMXBeanProxy
创建的代理,这意味着该方法必须出现在标准MBean或MXBean接口中。 否则这些方法具有以下行为:
MBeanServerInvocationHandler
之一是用类
参数构造的,那么另一个必须用equals相同的类
equals
才能返回true。 Constructor and Description |
---|
MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName)
调用处理程序,将方法通过MBean服务器转发到标准MBean。
|
MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName, boolean isMXBean)
调用处理程序,可以将方法通过MBean服务器转发到标准MBean或MXBean。
|
Modifier and Type | Method and Description |
---|---|
MBeanServerConnection |
getMBeanServerConnection()
使用此处理程序的代理方法转发的MBean服务器连接。
|
ObjectName |
getObjectName()
MBean服务器中转发方法的MBean的名称。
|
Object |
invoke(Object proxy, 方法 method, Object[] args)
处理代理实例上的方法调用并返回结果。
|
boolean |
isMXBean()
如果为true,则代理为MXBean,适当的映射应用于方法参数和返回值。
|
static <T> T |
newProxyInstance(MBeanServerConnection connection, ObjectName objectName, 类<T> interfaceClass, boolean notificationBroadcaster)
通过将其方法通过给定的MBean服务器转发到指定的MBean来返回实现给定接口的代理。
|
public MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName)
调用处理程序,将方法通过MBean服务器转发到标准MBean。 可以调用此构造函数,而不是依赖于JMX.newMBeanProxy
,例如,如果您需要将不同的ClassLoader
提供给Proxy.newProxyInstance
。
此构造函数不适用于MXBean。 使用MBeanServerInvocationHandler(MBeanServerConnection, ObjectName, boolean)
。 此构造函数相当于new MBeanServerInvocationHandler(connection, objectName, false)
。
connection
- 使用此处理程序的代理的所有方法将
connection
的MBean服务器连接。
objectName
- 要转发哪些方法的MBean服务器内的MBean的名称。
public MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName, boolean isMXBean)
调用处理程序,可以将方法通过MBean服务器转发到标准MBean或MXBean。 可以调用此构造函数,而不是依赖于JMX.newMXBeanProxy
,例如,如果您需要提供不同的ClassLoader
到Proxy.newProxyInstance
。
connection
- 使用此处理程序的代理的所有方法都将转发的MBean服务器连接。
objectName
- MBean服务器中要转发哪些方法的MBean的名称。
isMXBean
- 如果为true,则代理为MXBean
,适当的映射将应用于方法参数和返回值。
public MBeanServerConnection getMBeanServerConnection()
使用此处理程序的代理方法转发的MBean服务器连接。
public ObjectName getObjectName()
MBean服务器中转发方法的MBean的名称。
public boolean isMXBean()
如果为true,则代理为MXBean,适当的映射应用于方法参数和返回值。
public static <T> T newProxyInstance(MBeanServerConnection connection, ObjectName objectName, 类<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
为假以及两个如果这是真的。 interfaces
的第一个元素是interfaceClass
,第二个元素(如果有的话)是NotificationEmitter.class
。
T
- 允许编译器知道如果
interfaceClass
参数是
MyMBean.class
,那么返回类型是
MyMBean
。
connection
- 要转发的MBean服务器。
objectName
- 要转发到的
connection
内的MBean的名称。
interfaceClass
- MBean导出的管理界面,也将由返回的代理实现。
notificationBroadcaster
-使返回的代理实现NotificationEmitter
经由其方法转发connection
。
要在通话NotificationBroadcaster.addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
上的代理将导致调用MBeanServerConnection.addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)
,同样对于其他方法NotificationBroadcaster
和NotificationEmitter
。
JMX.newMBeanProxy(MBeanServerConnection, ObjectName, Class, boolean)
public Object invoke(Object proxy, 方法 method, Object[] args) throws Throwable
InvocationHandler
复制
invoke
在界面
InvocationHandler
proxy
- 调用该方法的代理实例
method
-所述方法
对应于调用代理实例上的接口方法的实例。
方法
对象的声明类将是方法声明的接口,它可以是代理类继承方法的代理接口的超级接口。
args
-包含的方法调用传递代理实例的参数值的对象的阵列,或null
如果接口方法没有参数。
原始类型的参数包含在适当的原始包装类的实例中,例如java.lang.Integer
或java.lang.Boolean
。
null
,并且接口方法的返回类型为原始值,那么NullPointerException
将由代理实例上的方法调用抛出。
如上所述,如果此方法返回的值,否则不会与接口方法的声明的返回类型兼容,一个ClassCastException
将代理实例的方法调用将抛出。
Throwable
- 从代理实例上的方法调用抛出的异常。
异常类型必须可以分配给在接口方法的throws
子句中声明的任何异常类型java.lang.RuntimeException
检查的异常类型java.lang.RuntimeException
或java.lang.Error
。
如果检查的异常是由这种方法是不分配给任何的中声明的异常类型throws
接口方法的子句,则一个UndeclaredThrowableException
包含有由该方法抛出的异常将通过在方法调用抛出代理实例。
UndeclaredThrowableException