パッケージ javax.management
Java Management Extensionsのコア・クラスを提供します。
Java Management Extension (JMX) APIは、管理とモニタリングのための標準APIです。 一般に、次の用途で使用されます。
- アプリケーションの構成の参照および変更
- アプリケーションの動作に関する統計情報の蓄積および有効化
- 状態の変化とエラー条件の通知
JMX APIは、システムやネットワークの管理ソリューションにも使用されます。
リモート管理プログラムは、APIのリモート・アクセス機能を利用して、実行中のアプリケーションにリモート・アクセスできます。
MBean
JMX APIの基本概念はMBeanです。 MBeanは、リソースを表す名前付きの管理オブジェクトです。 publicである必要があり、次のように構成された管理インタフェースを持ちます。
- 読み取りや書込みが可能な名前と型の指定された属性
- 呼出し可能な名前と型の指定されたオペレーション
- MBeanから発行可能な型が指定された通知
たとえば、アプリケーションの構成を表すMBeanは、複数の異なった構成項目を表す属性を持つことができます。 CacheSize属性を読み取った場合、その項目の現在の値が返されます。 同属性を書き込んだ場合、項目が更新され、実行中のアプリケーションの動作が変化する可能性があります。 saveなどのオペレーションでは、現在の構成を永続的に保存できます。 ConfigurationChangedNotificationなどの通知は、構成の変更のたびに送信できます。 
JMX APIの標準的な使用方法では、MBeanはJavaオブジェクトとして実装されます。 しかし、次に説明するとおり、通常これらのオブジェクトが直接参照されることはありません。
Standard MBean
MBean実装を単純化するため、JMX APIにはStandard MBeanの概念が導入されています。 標準MBeanは、JavaBeansで使用されるネーミング・パターンと同様に、特定のネーミング・パターンを使用してJavaインタフェースから属性および操作が推測されるMBeanです。 たとえば、次のようなインタフェースがあるとします。
    public interface ConfigurationMBean {
         public int getCacheSize();
         public void setCacheSize(int size);
         public long getLastChangedTime();
         public void save();
    }
        
        getCacheSizeメソッドとsetCacheSizeメソッドは、CacheSize (JavaBeansの規則とは異なり、最初の文字がアルファベットの大文字)という名前のint型の読取り書き込み属性を定義します。
getLastChangedTimeメソッドは、LastChangedTimeという名前のlong型の属性を定義します。 これは、setLastChangedTimeメソッドが存在しないため、読取り専用属性です。 
saveメソッドは、saveという名前のオペレーションを定義します。 get、set、またはisで始まる名前を持たないので、属性ではありません。 
Standard MBeanの正確なネーミング・パターンの詳細については、JMX仕様を参照してください。
この管理インタフェースで、MBeanであるJavaオブジェクトを作成する方法は2とおり存在します。 1つは、Javaインタフェースの名前からMBean接尾辞を除いた名前を持つクラスに属するオブジェクトを作成する方法です。 例では、オブジェクトは、ConfigurationMBeanと同じJavaパッケージのConfigurationクラスに属することになります。 もう1つの方法では、StandardMBeanクラスを使用します。 
MXBean
MXBeanはStandard MBeanのバリアントで、複雑な型がjavax.management.openmbeanパッケージで定義された標準セットの型にマッピングされます。 そうしないとMBeanインタフェースでアプリケーション固有のクラスを参照する必要がある場合に、MXBeanが適しています。 詳細は、MXBeanの仕様を参照してください。 
Dynamic MBean
Dynamic MBeanは、管理インタフェースを実行時に定義するMBeanです。 たとえば、構成MBeanは、XMLファイルの解析により、公開する属性の名前と型を決定できます。
DynamicMBeanインタフェースを実装するクラスのJavaオブジェクトはDynamic MBeanになります。
Open MBean
Open MBeanはDynamic MBeanの一種であり、その属性およびオペレーション・パラメータの型と戻り値は、いくつかの事前定義済みのJavaクラスを使って構築されます。 Open MBeanは、アプリケーション固有の型(非Javaプログラムを含む)に必ずしもアクセスできるとはかぎらないリモート管理プログラムを使って、オペレーションを簡便化します。 Open MBeanは、パッケージ javax.management.openmbeanで定義されます。 
Model MBean
Model MBeanは、管理インタフェースと配下の管理対象リソースのブリッジとして機能するDynamic MBeanの一種です。 管理インタフェースと管理対象リソースは、どちらもJavaオブジェクトとして指定されます。 複数の異なった管理インタフェースおよび管理対象リソースで、同じModel MBean実装を繰返し利用できます。また、Model MBean実装は、永続性機能、キャッシング機能などの共通機能を提供できます。 Model MBeanは、パッケージ javax.management.modelmbeanで定義されます。 
MBeanサーバー
MBeanを使用するためには、MBeanサーバーに登録する必要があります。 MBeanサーバーは、MBeanのリポジトリです。 通常、MBeanサーバーを利用しなければ、MBeanにはアクセスできません。 コードは、MBeanを直接実装するJavaオブジェクトにアクセスする代わりに、MBeanの名前を指定してMBeanサーバー経由でMBeanにアクセスするようになりました。 各MBeanは、MBeanサーバー内に、ObjectNameクラスによって定義された一意の名前を持ちます。 
MBeanサーバーは、MBeanServerインタフェースを実装するオブジェクトです。 もっとも便利なMBeanサーバーは、プラットフォームMBeanサーバーです。 これは、単一のJava仮想マシン内で動作する異なる管理コンポーネントで共有可能な単独のMBeanサーバーです。 プラットフォームMBeanサーバーには、ManagementFactory.getPlatformMBeanServer()メソッドでアクセスします。 
アプリケーション・コードでも、MBeanServerFactoryクラスを使って新しいMBeanサーバーを作成したり、既存のMBeanサーバーにアクセスしたりできます。
MBeanサーバーでのMBeanの作成
MBeanは2とおりの方法で作成できます。 1つ目の方法は、MBeanであるJavaオブジェクトを作成し、registerMBeanメソッドでそのオブジェクトをMBeanサーバーに登録します。 もう1つの方法では、createMBeanメソッドの1つを使用して単一オペレーションでMBeanの作成および登録を行います。 
registerMBeanメソッドは、ローカルでの使用を目的とした単純な構造となっていますが、リモートで使用することはできません。 createMBeanメソッドは、リモートで使用できますが、場合によってクラスのロードに注意を払う必要があります。 
MBeanサーバーでMBeanRegistrationインタフェースを導入している状態でMBeanをそのMBeanサーバーに登録またはそのサーバーから登録解除する場合、そのMBeanでアクションを実行できます。
MBeanサーバー内のMBeanへのアクセス
次の例のように、ObjectName nameとMBeanServer mbsを指定することにより、属性とオペレーションにアクセスできます。
    int cacheSize = mbs.getAttribute(name, "CacheSize");
    Attribute newCacheSize =
         new Attribute("CacheSize", new Integer(2000));
    mbs.setAttribute(name, newCacheSize);
    mbs.invoke(name, "save", new Object[0], new Class[0]);
        
        MBeanの管理インタフェースに対応するJavaインタフェースがある場合は、次のように、MBeanプロキシを利用できます。
    ConfigurationMBean conf =
        JMX.newMBeanProxy(mbs, name, ConfigurationMBean.class);
    int cacheSize = conf.getCacheSize();
    conf.setCacheSize(2000);
    conf.save();
        
        MBeanプロキシは非常に便利です。 2番目の例では、最初の例と同じMBeanServerオペレーションを呼び出します。 
MBeanサーバーで、特定のパターンに一致する名前を持つMBeanや、特定の制約を満たす属性を持つMBeanを照会できます。 名前パターンの構築にはObjectNameクラスを使用し、制約の構築にはQueryクラスを使用します。 その後、queryNamesメソッドとqueryMBeansメソッドによりクエリーが実行されます。 
MBeanライフ・サイクル
MBeanは、MBeanサーバーに登録および登録解除された場合に指示されるように、MBeanRegistrationインタフェースを実装できます。 また、preRegisterメソッドにより、MBeanはMBeanServerオブジェクトへの参照と、MBeanサーバー内のObjectNameを取得できます。 
通知
通知は、Notificationクラスまたはサブクラスのインスタンスです。 Javaクラスに加えて、同じクラスの通知の区別に使用する型文字列を持っています。 
通知を発行するMBeanは、NotificationBroadcasterまたはNotificationEmitterインタフェースを実装する必要があります。 通常、これらのインタフェースを実装するために、NotificationBroadcasterSupportのサブクラス化か、このクラスのインスタンスの委譲が行われます。 例: 
    public class Configuration extends NotificationBroadcasterSupport
            implements ConfigurationMBean {
        ...
        private void updated() {
            Notification n = new Notification(...);
            sendNotification(n);
        }
    }
        
        通知は、リスナーを使って受信できます。リスナーは、NotificationListenerインタフェースを実装するオブジェクトです。 MBeanServer.addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)メソッドを使って、MBeanにリスナーを追加できます。 オプションで、このメソッドにフィルタを適用して、必要な通知のみを選択することもできます。 フィルタは、NotificationFilterインタフェースを実装するオブジェクトです。 
MBeanは、同じMBeanサーバー上のその他のMBeanによって発行される通知のリスナーになることができます。 この場合、MBeanは、NotificationListenerを実装し、MBeanServer.addNotificationListener(ObjectName, ObjectName, NotificationFilter, Object)メソッドを利用して通知を待機します。 
MBeanへのリモート・アクセス
MBeanサーバーには、コネクタ経由でリモート・アクセスできます。 コネクタを使用すると、リモートのJavaアプリケーションが、ローカルのJavaアプリケーションと実質的に同じ方法でMBeanサーバーにアクセスできます。 パッケージ javax.management.remoteはコネクタを定義します。 
JMX仕様には、アダプタの概念も定義されています。 アダプタは、SNMPやHTMLなどのプロトコル内で要求を変換して、MBeanサーバーにアクセスします。 たとえば、SNMP GETオペレーションによりMBeanサーバー上でgetAttributeが実行されます。 
JMX仕様のバージョン間の相互運用性
クライアントがJMX Remote APIを使用してサーバーに接続した場合、JMX仕様のバージョンが同じではないことがあります。 ここで説明しているJMX仕様のバージョンはバージョン1.4です。 以前のバージョンは1.0、1.1、および1.2でした。 (1.3はありませんでした。) 標準JMX Remote APIはバージョン1.2以降で動作するように定義されているため、標準ベースの配備で発生する相互運用性の問題は、バージョン1.2以降のみに関係があります。
JMX仕様のすべてのバージョンは、以前のバージョンの機能を引き続き実装しています。 このため、クライアントがサーバーより前のバージョンを実行していても、相互運用性の問題は発生しないはずです。
クライアントがサーバーよりあとのバージョンを実行している場合は、次のセクションで説明しているとおり、特定の新機能が使用できない可能性があります。 クライアントは、 MBeanServerDelegateのSpecificationVersion属性を調査してサーバーのバージョンを判別できます。 
リモートのMBeanサーバーが1.2の場合
- ObjectNameのキーのプロパティに、- domain:type=Foo,name=*など、ワイルドカードを使用することはできません。 ただし、- *:*や- *:type=Foo,*など、プロパティ全体に一致するワイルドカードは許可されます。
- クエリー内で - Query.isInstanceOfは使用できません。
- javax.management.monitorパッケージのドキュメントに記述されているとおり、モニターの監視対象の属性で- HeapMemoryUsage.usedなどのドット構文を使用することはできません。
- 導入されたバージョン:
- 1.5
- 関連項目:
- JMX仕様、バージョン1.4
- 
インタフェースのサマリーインタフェース説明JMX要素の追加メタデータです。このインタフェースは、JMXコンポーネントに関連付けられたDescriptorクラスの記述子にアクセスするために使用されます。MBeanInfoなどの管理インタフェース要素のDescriptorを読み取るためのインタフェースです。Dynamic MBean (動的管理インタフェースを公開するMBean)に実装するメソッドを定義します。MBeanサーバーへの登録またはMBeanサーバーからの登録解除の前後にさまざまなオペレーションを実行するため、MBeanにより実装されます。エージェント側でMBeanを操作するためのインタフェースです。このインタフェースは、MBeanサーバー(ローカルまたはリモート)との通信方法を示します。MBeanServerDelegateクラスのオブジェクトの管理インタフェースを定義します。Notificationを発行するMBeanが実装しているインタフェースです。Notificationを発行するMBeanが実装しているインタフェースです。通知フィルタとして機能するすべてのクラスによって実装されます。通知の受信を望むオブジェクトによって実装される必要があります。このクラスは、MBeanによって実装されるインタフェース(永続インタフェース)です。データベース・クエリーの「WHERE句」に似た関係制約を表します。関係式の引数として渡すことができる値を表します。
- 
クラスのサマリークラス説明名前と値を関連付けることにより、MBean属性を表現します。MBeanによって送信される属性変更通知を定義します。このクラスは、attribute change notificationのNotificationFilterインタフェースを実装します。MBeanの属性の値のリストを表します。関係制約の引数として使用される属性を表します。非推奨。不変記述子。JMX APIからのstaticメソッドです。管理用として公開されるMBean属性を記述します。MBeanによって公開されるコンストラクタを記述します。MBean記述子オブジェクトに一般情報を提供します。MBeanによって公開された管理インタフェース(管理オペレーションに使用できる属性と操作のセット)を記述します。MBeanNotificationInfoクラスは、MBeanによって発行された、指定の通知Javaクラスに対する複数の異なった通知インスタンスの特性を記述します。MBeanによって公開される管理オペレーションを記述します。MBeanによって公開されるオペレーションの引数を記述します。MBeanServerオペレーションのアクセスを制御するアクセス権です。このクラスは、デフォルトのMBeanServer実装を作成するビルダーを表します。管理の視点でMBeanサーバーを表現します。MBeanサーバー参照を提供します。MBeanの管理インタフェースに含まれるメソッドをMBeanサーバー経由でMBeanに転送するInvocationHandlerです。MBeanサーバーにより、MBeanServerDelegate MBeanから発行される通知を表します。MBeanServer関連のアクションを実行するためのアクセス権です。このアクセス権は、署名者またはコード・ベースの「trust」を表します。Notificationクラスは、MBeanが発行する通知を表します。NotificationEmitterインタフェースの実装を提供します。NotificationFilterインタフェースの実装を提供します。MBeanのオブジェクト名とクラス名を表します。MBeanのオブジェクト名、または複数のMBean名に一致するパターンを表します。クエリー・オブジェクト制約を構築します。特定のMBeanサーバーのコンテキストでクエリーを実行します。Javaインタフェースのリフレクションによって管理インタフェースを決定し、通知を発行するMBeanです。Javaインタフェースのリフレクションによって管理インタフェースを決定するMBeanです。関係制約の引数になる文字列を表します。
- 
例外のサマリー例外説明指定された属性が存在しないか、取得できません。クエリーを構築するメソッドに無効なMBean属性が渡された場合にスローされます。クエリーを構築するメソッドに無効な式が渡された場合にスローされます。クエリーを構築するメソッドに無効な文字列オペレーションが渡された場合にスローされます。MBeanはすでにリポジトリに登録されています。指定されたMBeanがリポジトリ内に存在しません。MBeanのイントロスペクションの実行時に発生した例外です。MBeanへのサブクエリー式またはMBeanへの修飾属性式のクラスが間違っている場合にスローされます。指定された値は、属性に対する有効な値ではありません。JMX実装からスローされる例外です。JMX実装から返される実行時例外です。指定されたMBeanリスナーがリポジトリ内に存在しません。文字列の形式が有効なObjectNameに対応していません。エージェント内のMBeanメソッドによってスローされるユーザー定義の例外を表します。MBeanRegistrationインタフェースのpreRegister()メソッドとpreDeregister()メソッドによってスローされる例外をラップします。MBeanサーバーにJMX準拠のMBeanでないオブジェクトを登録しようとした場合に発行される例外です。MBeanのオペレーションの実行時に、MBeanサーバー内でスローされる例外を表します。java.lang.reflectクラスを使ってMBean上のメソッドを呼び出すとき、MBeanサーバー内でスローされる例外を表します。エージェント内でjava.lang.Errorが発生した場合、キャッチして、RuntimeErrorExceptionとして再スローする必要があります。エージェント内のMBeanメソッドによってスローされる実行時例外を表します。MBeanでオペレーションの実行時にエージェント内でスローされる実行時例外を表します。要求されたサービスがサポートされていない場合に発行される例外を表します。
- 
注釈インタフェースの概要注釈インタフェース説明コンストラクタの注釈。構築されたオブジェクトのgetterメソッドにこのコンストラクタのパラメータがどのように対応するかを示します。注釈要素とDescriptor内のフィールドとの関係を記述するメタ注釈です。インタフェースに対して、MXBeanインタフェースである、またはMXBeanインタフェースではないというマークを明示的に付けるための注釈です。
MBeanServer.getClassLoaderRepository()を使用してください。