- java.lang.Object
-
- javax.management.MBeanServerInvocationHandler
-
- All Implemented Interfaces:
-
InvocationHandler
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接口中。 否则这些方法具有以下行为:- toString()返回代理的字符串表示形式
- hashCode()返回代理的哈希码,使得两个相等的代理具有相同的哈希码
- 如果Object参数与此代理具有相同的代理类,则equals(Object)将返回true,而MBeanServerInvocationHandler具有相同的MBeanServerConnection和ObjectName; 如果其中一个
MBeanServerInvocationHandler
被构造为一个Class
参数,则另一个必须已经被构造为相同的Class
为equals
返回true。
- 从以下版本开始:
- 1.5
-
-
构造方法摘要
构造方法 Constructor 描述 MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName)
调用处理程序,将方法通过MBean服务器转发到标准MBean。MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName, boolean isMXBean)
调用处理程序,可以将方法通过MBean服务器转发到标准MBean或MXBean。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 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, Class<T> interfaceClass, boolean notificationBroadcaster)
通过将其方法通过给定的MBean服务器转发到指定的MBean来返回实现给定接口的代理。
-
-
-
构造方法详细信息
-
MBeanServerInvocationHandler
public MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName)
调用处理程序,将方法通过MBean服务器转发到标准MBean。 可以调用此构造函数,而不是依赖于
JMX.newMBeanProxy
,例如,如果您需要将不同的ClassLoader
提供给Proxy.newProxyInstance
。此构造函数不适用于MXBean。 为此使用
MBeanServerInvocationHandler(MBeanServerConnection, ObjectName, boolean)
。 该构造函数相当于new MBeanServerInvocationHandler(connection, objectName, false)
。- 参数
-
connection
- 使用此处理程序的代理的所有方法将通过该MBean服务器连接进行转发。 -
objectName
- 要转发哪些方法的MBean服务器中的MBean的名称。
-
MBeanServerInvocationHandler
public MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName, boolean isMXBean)
调用处理程序,可以将方法通过MBean服务器转发到标准MBean或MXBean。 可以调用此构造函数,而不是依赖于
JMX.newMXBeanProxy
,例如,如果您需要将不同的ClassLoader
提供给Proxy.newProxyInstance
。- 参数
-
connection
- 使用此处理程序的代理的所有方法将转发的MBean服务器连接。 -
objectName
- 要转发哪些方法的MBean服务器中的MBean的名称。 -
isMXBean
- 如果为true,代理为MXBean
,并且适当的映射将应用于方法参数和返回值。 - 从以下版本开始:
- 1.6
-
-
方法详细信息
-
getMBeanServerConnection
public MBeanServerConnection getMBeanServerConnection()
使用此处理程序的代理方法转发的MBean服务器连接。
- 结果
- MBean服务器连接。
- 从以下版本开始:
- 1.6
-
getObjectName
public ObjectName getObjectName()
MBean服务器中转发方法的MBean的名称。
- 结果
- 对象名称。
- 从以下版本开始:
- 1.6
-
isMXBean
public boolean isMXBean()
如果为true,则代理为MXBean,适当的映射应用于方法参数和返回值。
- 结果
- 代理是否用于MXBean。
- 从以下版本开始:
- 1.6
-
newProxyInstance
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
为假以及两个如果这是真的。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)
-
invoke
public Object invoke(Object proxy, 方法 method, Object[] args) throws Throwable
描述从接口InvocationHandler
复制处理代理实例上的方法调用并返回结果。 当在与之关联的代理实例上调用方法时,将在调用处理程序中调用此方法。- Specified by:
-
invoke
在接口InvocationHandler
- 参数
-
proxy
- 调用该方法的代理实例 -
method
- 对应于在代理实例上调用的接口方法的方法
实例。方法
对象的声明类将是方法声明的接口,它可以是代理类继承方法的代理接口的超级接口。 -
args
- 包含代理实例上方法调用中传递的参数值的对象数组,如果接口方法不带参数,null
。 原始类型的参数包含在适当的原始包装器类的实例中,例如java.lang.Integer
或java.lang.Boolean
。 - 结果
-
从代理实例上的方法调用返回的值。
如果接口方法的声明返回类型是原始类型,则此方法返回的值必须是对应的基本包装类的实例;
否则,它必须是可声明返回类型的类型。
如果此方法返回的值为
null
,并且接口方法的返回类型是原始的,则代理实例上的方法调用将抛出一个NullPointerException
。 如果此方法返回的值与上述的接口方法声明的返回类型不兼容,那么代理实例上的方法调用将抛出一个ClassCastException
。 - 异常
-
Throwable
- 从代理实例上的方法调用抛出的异常。 异常类型必须可以分配给接口方法的throws
子句中声明的任何异常类型或未检查的异常类型java.lang.RuntimeException
或java.lang.Error
。 如果此方法抛出一个检查的异常,该异常不能分配给接口方法的throws
子句中声明的任何异常类型,则包含该方法抛出的异常的UndeclaredThrowableException
将被引用在方法调用上代理实例。 - 另请参见:
-
UndeclaredThrowableException
-
-