javax.management

接口
异常
注释
java.lang.Object
  继承者 javax.management.MBeanServerInvocationHandler
所有已实现的接口:
InvocationHandler

public class MBeanServerInvocationHandler
     
extends Object
implements InvocationHandler

通过 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) 会将 someListList<String> 转换为 String[],调用 MBean 操作 reverse,然后将返回的 String[] 转换为 List<String>

当使用此调用处理程序对代理调用方法 Object.toString()、Object.hashCode() 和 Object.equals(Object) 时,仅当这些方法出现在一个代理接口中时,才将它们转发到 MBean 服务器。对于使用 JMX.newMBeanProxyJMX.newMXBeanProxy 创建的代理而言,这意味着这些方法必须出现在 Standard MBean 或 MXBean 接口中。否则,这些方法具有以下行为:

  • toString() 返回该代理的字符串表示形式
  • hashCode() 返回代理的哈希码,因此两个相等的代理具有相同的哈希码
  • 当且仅当 Object 参数的代理类型与此代理相同时(带有具有相同 MBeanServerConnection 和 ObjectName 的 MBeanServerInvocationHandler),equals(Object) 才返回 true;如果其中一个 MBeanServerInvocationHandler 是使用 Class 参数构造的,则要 equals 返回 true,另一个 MBeanServerInvocationHandler 必须是使用相同的 Class 参数构造的。

从以下版本开始:
1.5

构造方法摘要
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
<T> T
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
 

构造方法详细信息

MBeanServerInvocationHandler

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。

MBeanServerInvocationHandler

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,并且将适当映射应用于方法参数和返回值。
从以下版本开始:
1.6
方法详细信息

getMBeanServerConnection

public MBeanServerConnection getMBeanServerConnection()

MBean 服务器连接,使用此处理程序的代理的方法是通过此连接转发的。

返回:
MBean 服务器连接。
从以下版本开始:
1.6

getObjectName

public ObjectName getObjectName()

MBean 服务器中 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)。其中 handlernew 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) 的调用,对于 NotificationBroadcasterNotificationEmitter 的其他方法也是如此。
返回:
新的代理实例。
另请参见:
JMX.newMBeanProxy(MBeanServerConnection, ObjectName, Class)

invoke

public Object invoke(Object proxy,
                     Method method,
                     Object[] args)
              throws Throwable
从接口 InvocationHandler 复制的描述
在代理实例上处理方法调用并返回结果。在与方法关联的代理实例上调用方法时,将在调用处理程序上调用此方法。

指定者:
接口 InvocationHandler 中的 invoke
参数:
proxy - 在其上调用方法的代理实例
method - 对应于在代理实例上调用的接口方法的 Method 实例。 Method 对象的声明类将是在其中声明方法的接口,该接口可以是代理类赖以继承方法的代理接口的超接口。
args - 包含传入代理实例上方法调用的参数值的对象数组,如果接口方法不使用参数,则为 null。基本类型的参数被包装在适当基本包装器类(如 java.lang.Integerjava.lang.Boolean)的实例中。
返回:
从代理实例的方法调用返回的值。如果接口方法的声明返回类型是基本类型,则此方法返回的值一定是相应基本包装对象类的实例;否则,它一定是可分配到声明返回类型的类型。如果此方法返回的值为 null 并且接口方法的返回类型是基本类型,则代理实例上的方法调用将抛出 NullPointerException。否则,如果此方法返回的值与上述接口方法的声明返回类型不兼容,则代理实例上的方法调用将抛出 ClassCastException
抛出:
Throwable - 从代理实例上的方法调用抛出的异常。该异常的类型必须可以分配到在接口方法的 throws 子句中声明的任一异常类型或未经检查的异常类型 java.lang.RuntimeExceptionjava.lang.Error。如果此方法抛出经过检查的异常,该异常不可分配到在接口方法的 throws 子句中声明的任一异常类型,代理实例的方法调用将抛出包含此方法曾抛出的异常的 UndeclaredThrowableException
另请参见:
UndeclaredThrowableException