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
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.