JavaTM 2 Platform
Standard Ed. 5.0

javax.management
类 MBeanServerInvocationHandler

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 的模式描述 MBean 的管理接口)的情况下,此类可用于构造 MBean 的代理。该代理实现接口 Intf,这样可通过 MBean 服务器向 MBean 转发其所有方法。

如果 MBean 服务器 mbs 包含具有 ObjectNamename 的 MBean,并且如果该 MBean 的管理接口由 Java 接口 Intf 所描述,则可以象下面这样为该 MBean 构造一个代理:

 Intf proxy = (Intf)
     MBeanServerInvocationHandler.newProxyInstance(mbs,
name,
                                                   Intf.class,
                                                   false);
 

例如,假定 Intf 如下:

 public interface Intf {
     public String getSomeAttribute();
     public void setSomeAttribute(String value);
     public void someOperation(String param1, int param2);
 }
 

那么可以执行:

如果 newProxyInstance 的最后一个参数是 true,则假定该 MBean 是一个 NotificationBroadcasterNotificationEmitter,并且返回的代理将实现 NotificationEmitter。在该代理上调用 NotificationBroadcaster.addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object) 将导致对 MBeanServerConnection.addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object) 的调用,对于 NotificationBroadcasterNotificationEmitter 的其他方法也是如此。

当使用此调用处理程序在代理上调用方法 Object.toString()Object.hashCode()Object.equals(Object) 时,会以一种与在已代理 MBean 上调用方法相同的形式将其转发到 MBean 服务器。仅当该 MBean 在其管理接口中声明了这些方法时才能如此操作。

从以下版本开始:
1.5

构造方法摘要
MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName)
          通过 MBean 服务器转发方法的调用处理程序。
 
方法摘要
 Object invoke(Object proxy, Method method, Object[] args)
          在代理实例上处理方法调用并返回结果。
static Object newProxyInstance(MBeanServerConnection connection, ObjectName objectName, Class 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 服务器转发方法的调用处理程序。可能会调用此构造方法,而不是依赖于 newProxyInstance(javax.management.MBeanServerConnection, javax.management.ObjectName, java.lang.Class, boolean),例如在需要为 Proxy.newProxyInstance 提供一个不同 ClassLoader 的情况下。

参数:
connection - MBean 服务器连接,通过此连接转发所有使用此处理程序的代理方法。
objectName - MBean 服务器内的 MBean 名称,各个方法将转发到该 MBean。
方法详细信息

newProxyInstance

public static Object newProxyInstance(MBeanServerConnection connection,
                                      ObjectName objectName,
                                      Class interfaceClass,
                                      boolean notificationBroadcaster)

返回一个代理,该代理通过将代理的方法从给定的 MBean 服务器转发到指定 MBean 来实现给定的接口。

此方法等效于 Proxy.newProxyInstance(interfaceClass.getClassLoader(), interfaces, handler)。其中 handlernew MBeanServerInvocationHandler(connection, objectName) 的结果,而 interfaces 是一个数组,如果 notificationBroadcaster 为 false,则该数组有一个元素,如果为 true,则该数组有两个元素。interfaces 的第一个元素是 interfaceClass,第二个(如果有)是 NotificationEmitter.class

参数:
connection - 要转发到的目标 MBean 服务器。
objectName - 在要转发到的 connection 内的 MBean 名。
interfaceClass - MBean 输出的管理接口,也由返回的代理来实现。
notificationBroadcaster - 使返回的代理实现 NotificationEmitter,方法是通过 connection 转发其方法。
返回:
新的代理实例。

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

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策