Java™ Platform
Standard Edition 7

パッケージ javax.management

Java Management Extensions のコアクラスを提供します。

参照: 説明

パッケージ javax.management の説明

Java Management Extensions のコアクラスを提供します。

Java Management Extension (JMXTM) API は、管理と監視のための標準 API です。一般に、次の用途で使用されます。

JMX API は、システムやネットワークの管理ソリューションにも使用されます。

リモート管理プログラムは、JMX API のリモートアクセス機能を利用して、実行中のアプリケーションにリモートアクセスできます。

MBean

JMX API の基本概念は MBean です。MBean は、リソースを表す名前付きの管理オブジェクトです。次のような管理インタフェースを持ちます。

たとえば、アプリケーションの構成を表す MBean は、複数の異なった構成項目を表す属性を持つことができます。CacheSize 属性を読み取った場合、その項目の現在の値が返されます。同属性を書き込んだ場合、項目が更新され、実行中のアプリケーションの動作が変化する可能性があります。save などのオペレーションでは、現在の構成を永続的に保存できます。ConfigurationChangedNotification などの通知は、構成の変更のたびに送信できます。

JMX API の標準的な使用方法では、MBean は Javaオブジェクトとして実装されます。しかし、次に説明するとおり、通常これらのオブジェクトが直接参照されることはありません。

Standard MBean

MBean 実装を単純化するため、JMX API には Standard MBean の概念が導入されています。StandardMBean は、JavaBeansTMのネーミングパターンとよく似たネーミングパターンを使って 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 という名前のオペレーションを定義します。getset、または 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 nameMBeanServer 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 仕様のすべてのバージョンは、以前のバージョンの機能を引き続き実装しています。このため、クライアントがサーバーより前のバージョンを実行していても、相互運用性の問題は発生しないはずです。

クライアントがサーバーよりあとのバージョンを実行している場合は、次のセクションで説明しているとおり、特定の新機能が使用できない可能性があります。クライアントは、MBeanServerDelegateSpecificationVersion 属性を調査してサーバーのバージョンを判別できます。

リモートの MBean サーバーが 1.2 の場合

導入されたバージョン:
1.5
関連項目:
Java プラットフォームの JMX テクノロジに関するドキュメント、特に『JMX 仕様、バージョン 1.4』(pdf)。
Java™ Platform
Standard Edition 7

バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.