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、および Standard MBean のパターンを使用する MBean の管理インタフェースを記述する Java インタフェース Intf により、このクラスを使って MBean のプロキシを構築できます。プロキシは、すべてのメソッドが MBean サーバから MBean へ渡されるように、Intf インタフェースを実装します。

MBean サーバ mbsObjectName name を持つ 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 は NotificationBroadcaster または NotificationEmitter と見なされ、NotificationEmitter を実装するプロキシが返されます。このプロキシ上で NotificationBroadcaster.addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object) を呼び出すと、MBeanServerConnection.addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object) が呼び出されます。NotificationBroadcaster および NotificationEmitter のその他のメソッドの場合も同様です。

この呼び出しハンドラにより、プロキシ上で 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 サーバから送信する呼び出しハンドラです。このコンストラクタは、たとえば、Proxy.newProxyInstance へ異なった ClassLoader を渡したい場合に、newProxyInstance(javax.management.MBeanServerConnection, javax.management.ObjectName, java.lang.Class, boolean) の代わりに呼び出されます。

パラメータ:
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 である場合に 1 つ要素を持ち、true である場合に 2 つ要素を持つ配列です。interfaces の最初の要素は interfaceClass、2 番目の要素は NotificationEmitter.class (存在する場合) です。

パラメータ:
connection - 送信先の MBean サーバ
objectName - connection 内で渡される MBean の名前
interfaceClass - MBean がエクスポートする管理インタフェース。返されるプロキシも、これを実装する
notificationBroadcaster - connection からメソッドを送信することにより、返されるプロキシに NotificationEmitter を実装させる
戻り値:
新しいプロキシのインスタンス

invoke

public Object invoke(Object proxy,
                     Method method,
                     Object[] args)
              throws Throwable
インタフェース InvocationHandler の記述:
プロキシインスタンスでメソッド呼び出しを処理し、その結果を返します。関連したプロキシインスタンスでメソッドが呼び出されると、このメソッドは呼び出しハンドラで呼び出されます。

定義:
インタフェース InvocationHandler 内の invoke
パラメータ:
proxy - メソッドが呼び出されるプロキシインスタンス
method - プロキシインスタンスで呼び出されるインタフェースメソッドに対応する Method インスタンス。Method オブジェクトの宣言クラスは、メソッドを宣言したインタフェースとなる。プロキシクラスがメソッドの継承に使うプロキシインタフェースのスーパーインタフェースとなる場合もある
args - プロキシインスタンスでのメソッド呼び出し時に渡される引数値を格納するオブジェクト配列。インタフェースメソッドが引数をとらない場合、null となる。プリミティブ型引数は java.lang.Integer または java.lang.Boolean のような適切なプリミティブ型ラッパークラスのインスタンスにラップされる
戻り値:
プロキシインスタンスでのメソッド呼び出しからの戻り値。インタフェースメソッドの宣言された戻り値の型がプリミティブ型の場合は、このメソッドの戻り値は対応するプリミティブラッパークラスのインスタンスでなければならない。そうでない場合、宣言された戻り値の型に割り当てられる型でなければならない。このメソッドによる戻り値が null で、インタフェースメソッドの戻り値がプリミティブ型の場合、プロキシインスタンスでのメソッド呼び出しによって NullPointerException がスローされる。これ以外のケースで、このメソッドの戻り値と上記のようなインタフェースメソッドの宣言された戻り値の型との間に互換性がない場合、ClassCastException はプロキシインスタンスでのメソッド呼び出しによってスローされることになる
例外:
Throwable - プロキシインスタンスでのメソッド呼び出しからスローされる例外。この例外のタイプは、インタフェースメソッドの throws 節に宣言される例外タイプか、または、チェックされない例外タイプの java.lang.RuntimeException または java.lang.Error に割り当てられなければならない。このメソッドによってスローされるチェック例外が、インタフェースメソッドの throws 節に宣言された例外タイプに割り当てられない場合、このメソッドがスローした例外を格納する UndeclaredThrowableException がプロキシインスタンスでのメソッド呼び出しによってスローされることになる
関連項目:
UndeclaredThrowableException

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。