Java (TM)

JMX API の拡張

ドキュメントの目次

Java Management Extensions (JMX) テクノロジが、Java 2 Platform, Standard Edition (J2SE) 5.0 の Java プラットフォームに追加されました。今回、Java Platform, Standard Edition (Java SE) 6 の JMX API における、もっとも大きな拡張内容を次に示します。

次のリストには、Java SE 6 プラットフォームにおける JMX API の変更点がすべて記載されています。関連事項がある場合は、それに対応したバグレポートや RFE (機能拡張要求) へのリンクを用意しています。

総称化

J2EE 1.4 と J2SE 5.0 の両方で バージョン 1.2 の JMX API が統合されたことによる制約は、J2SE 5.0 で総称化できなかったことでした。今回のリリースでは、この点が修正されました (4847959)。総称化の多くは総称化されたコレクション API (java.util.List など) のアプリケーションで構成されています。したがって、たとえば、MBeanServer.queryNames が単に Set 返していた状況でも、今回の変更により、Set<ObjectName> が返されるようになりました。また、javax.management.openmbean.OpenType クラスとそのサブクラスも総称化されたため、型の制約を表現できるようになりました。OpenMBeanAttributeInfoSupportOpenMBeanParameterInfoSupport は、自身のコンストラクタ内で型の制約を取得して、デフォルト値や有効な値を正しい型にする要求を満たします。StandardMBean コンストラクタ も同様に型の制約を取得するため、リソースパラメータでインタフェースパラメータによって指定されたインタフェースが確実に実装されます。

次のクラスとメソッドが更新されました。

MLetMBean と MLet's getMBeansFromURL メソッドは、戻り値の Set 要素が ObjectInstance または Throwable のどちらかになる可能性があるため、総称を使用することはできません。AttributeList、RoleList、RoleUnresolvedList は、より自然な表現である ArrayList<Attribute> などではなく、ArrayList<Object> を拡張します。ArrayList<Attribute> などは、既存の add メソッドと set メソッドがそれぞれ boolean や Object ではなく void を返すため、不整合が発生する可能性があるためです。

新しいメソッド AttributeList.asList()RoleList.asList()RoleUnresolvedList.asList() は、正しい型のパラメータを持つ基本オブジェクトの List ビューを生成します。新しいコンストラクタ AttributeList(List<Attribute>) は、逆の方向に転換します (RoleList と RoleUnresolvedList にはすでにこのようなコンストラクタがあります)。

総称化の原理の詳細には、API 生成時に作成された選択肢が記載されています。

MXBean

従来、複合型のポータブルモデリングには Open MBean を使用して実行する必要がありましたが、これは扱いにくいものです。そのため、J2SE 5 には複合型をより簡単にモデリングできるように MXBean が追加されました。今回、このリリースから、この MXBean が一般化されました (6175517)。MXBean は、Java インタフェースの型と管理インタフェースの型の間で非一致マッピングを提供する標準 MBean の特別な種類です。標準 MBean と同じ方法で、MXBean には getX メソッドや setX メソッドで定義される属性が含まれます。他のメソッドは操作内容を示します。ただし、MXBean を使用すると、実際に MBean サーバーに登録された MBean では、その属性、操作パラメータ、および戻り値に対応するまったく同じ型が含まれないことになります。その代わり、MXBean インタフェースで発生するそれぞれの型は、javax.management.openmbean に定義されている固定セットで構築された型に変換されます。MBean サーバーに実際に登録されている MBean は、これらの変換された型を参照する Open MBean です。MBean はアクセスされると、元の MXBean インタフェース型と変換後の Open MBean 型の間で値を変換します。

この方法を使用することで、クライアントは、MXBean インタフェースで参照される可能性のあるモデル固有の型を識別する必要なく MXBean にアクセスできます。クライアントは標準の Open MBean 型を識別するだけですみます。

MXBean の完全な仕様は、注釈 @MXBean のドキュメントに記述されています。

MXBean の導入により、次のクラスとインタフェースが追加または影響されました。

記述子

記述子を使用して、MBean の追加のメタデータを提供できます。従来は、Model MBean のみが記述子をサポートしていました。今回のリリースでは、すべての MBean 型で記述子がサポートされるようになりました (6204469)。また、このリリースでは、すべての MBean 型のメタデータの汎用性に加え、さまざまな MBean 間にある不要な差異をなくしています。特に、Open MBean と Model MBean の両方に属する MBean を持つことができるようになります。

クラス MBean*Info (MBeanInfo, MBeanAttributeInfo など) のほとんどのコンストラクタの場合、同じパラメータに加えて追加の Descriptor パラメータを持つ並列のコンストラクタが追加されました。また、OpenMBean*InfoSupport も同様です。

Open MBean は、OpenMBeanParameterInfo および OpenMBeanAttributeInfo のメソッド getDefaultValue()getLegalValues()getMaxValue()getMinValue() から、デフォルト値と有効な値に関する情報を返します。今回、この情報が対応する記述子にも含まれるようになりました。また、他の MBean 型も自身の記述子の情報を返すことができます。

javax.management.DescriptorRead と呼ばれる DescriptorAccess の親インタフェースが追加されました。これには、getDescriptor メソッドが含まれますが、setDescriptor メソッドは含まれません。MBean*Info クラスは DescriptorRead を実装します。

次に、javax.management.ImmutableDescriptor と呼ばれる記述子インタフェースの不変実装も追加されました。これを使用すると、不変のメタデータを持つすべての MBean (Model MBean 以外) のプロパティーが保存されます。

新しい型の記述子項目 (フィールド) が Descriptor 仕様に記述されました (6254721)。これらの項目の一部は、実装 (仕様ではイタリック体) によって識別されますが、他に関しては識別されずに残ります。あらかじめ定義されたフィールド名は、新しい JMX クラスに対応する文字列定数を持っています (6282502)。

新しい注釈 DescriptorKey を使用すると、標準 MBean (または MXBean) インタフェースの注釈から標準 MBean (または MXBean) の記述子に情報を追加できます (6221321)。これによって、ツールが既存の管理モデルから標準 MBeans を生成し、そのモデルからの情報を別のファイルではなく生成された MBean インタフェースに持たせることができます。

メソッド Descriptor.getFieldValues(String...) とコンストラクタ DescriptorSupport(String...) は、従来は String[] パラメータを持っていました。varargs の構文により、これらが使いやすくなりました。

他にも、次のように記述子に関連した変更点が多くあります。

新しいクラス javax.management.JMX

新しいクラス、javax.management.JMX が、定数および静的メソッドを格納するために追加されました。

NotificationBroadcaster と NotificationBroadcasterSupport

インタフェース NotificationBroadcaster とそのデフォルト実装の NotificationBroadcasterSupportには、多くの変更点があります。

ObjectName

ObjectName には、多くの変更点があります。

標準 MBean

標準 MBean の仕様に次の変更が加えられました。

動的な MBean

動的な MBean に次の変更が加えられました。

Model MBean

Model MBean の仕様には、細かい変更点が数多く適用されています。

Open MBean

Open MBean に対する変更の多くは、ユーザー定義の MXBean が加わることが前提に考えられました。ここに、すべての変更点を示します。

監視サービス

次の変更点が監視サービス (パッケージ javax.management.monitor) の仕様に加わりました。

タイマーサービス

次の変更点がタイマーサービス (パッケージ javax.management.timer) の仕様に加わりました。

MLet サービス

次の変更点が MLet サービス (パッケージ javax.management.loading) の仕様に加わりました。

関係サービス

次の変更点が関係サービス (パッケージ javax.management.relation) の仕様に加わりました。

クエリー

新しい javax.managent.Query.isInstanceOf(StringValueExp className) メソッド を使用することで、特定のクラスのインスタンスであるすべての MBean を取得できます (5072174)。

MBeanServerInvocationHandler

次の変更点が MBeanServerInvocationHandler の仕様に加わりました。

新しいメソッド JMX.newMBeanProxy は、MBeanServerInvocationHandler.newProxyInstance の代わりで、より覚えやすくなりました。

直列化形式

JMX API におけるクラスの直列化形式の仕様が、次のように明確になりました。

アクセス権のチェック

従来、JMX の仕様には、null でない SecurityManager がある場合 (またはある場合のみ)、アクセス権のチェックが実行されるように記述されていました。これが変更され、SecurityManager の有無を確認する必要がない記述に変更されました。つまり、今回から、実装は SecurityManager が存在しない場合でも、チェックを実行するかどうかを選択できます。 (6419572)

MBean RuntimeException 処理

JMX の仕様は、MBean の属性や操作を実装しているメソッドが RuntimeException をスローした場合、何が発生するかについて記述があいまいでした (5043152)。綿密に解釈すると RuntimeMBeanException の例外をラップする必要があることがわかりましたが、RuntimeOperationsException でそれをラップできないかは明確ではありませんでした。今回、RuntimeMBeanException について仕様に明示的に記述され、また、RuntimeOperationsException が MBean メソッドが呼び出される前に (null 属性を持つ getAttribute など) 発生する例外をラップすることも明示的に記述されました。

Model MBeans は、RuntimeMBeanException ではなく、RuntimeOperationsException の ManagedResource で呼び出されたメソッドから来る例外をラップします。
これは明確に指定されていませんでしたが、変更した場合、既存のコードが壊れる可能性がありました。そのため、既存の動作だけでなく、MBean が 以降はラップされない RuntimeOperationsException をスローする条件も明確に指定しました。

JMX Remote API

次の変更点がJMX Remote API の仕様に加わりました。


Copyright © 2006 Sun Microsystems, Inc. All Rights Reserved.

フィードバック
Sun