|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjavax.management.MBeanServerInvocationHandler
public class MBeanServerInvocationHandler
MBean の管理インタフェース内で、MBean サーバから MBean にメソッドを渡す InvocationHandler です。
MBeanServerConnection、その MBean サーバ内の MBean の ObjectName、および Standard MBean のパターンを使用する MBean の管理インタフェースを記述する Java インタフェース Intf により、このクラスを使って MBean のプロキシを構築できます。プロキシは、すべてのメソッドが MBean サーバから MBean へ渡されるように、Intf インタフェースを実装します。
MBean サーバ mbs に ObjectName 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);
}
これで、次の内容を実行できます。
proxy.getSomeAttribute() - mbs.getAttribute(name, "SomeAttribute") を呼び出す
proxy.getSomeAttribute() - mbs.getAttribute(name, "SomeAttribute") を呼び出す
proxy.someOperation("param1", 2) - mbs.invoke(name, "someOperation", <etc>) の呼び出しに変換される
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 の管理インタフェースにこれらのメソッドが宣言されている必要があります。
| コンストラクタの概要 | |
|---|---|
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 |
| コンストラクタの詳細 |
|---|
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 に渡される| メソッドの詳細 |
|---|
public static Object newProxyInstance(MBeanServerConnection connection,
ObjectName objectName,
Class interfaceClass,
boolean notificationBroadcaster)
指定の MBean サーバから MBean へメソッドを渡すことにより、指定されたインタフェースを実装するプロキシを返します。
このメソッドは Proxy.newProxyInstance(interfaceClass.getClassLoader(), interfaces, handler) と同等です。handler は new MBeanServerInvocationHandler(connection, objectName) の結果です。interfaces は、notificationBroadcaster が false である場合に 1 つ要素を持ち、true である場合に 2 つ要素を持つ配列です。interfaces の最初の要素は interfaceClass、2 番目の要素は NotificationEmitter.class (存在する場合) です。
connection - 送信先の MBean サーバobjectName - connection 内で渡される MBean の名前interfaceClass - MBean がエクスポートする管理インタフェース。返されるプロキシも、これを実装するnotificationBroadcaster - connection からメソッドを送信することにより、返されるプロキシに NotificationEmitter を実装させる
public Object invoke(Object proxy,
Method method,
Object[] args)
throws Throwable
InvocationHandler の記述:
InvocationHandler 内の invokeproxy - メソッドが呼び出されるプロキシインスタンス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 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。