JavaTM 2 Platform
Standard Ed. 6

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 或 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 介面中。否則,這些方法具有以下行為:

從以下版本開始:
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

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only