パッケージ javax.management
Java Management Extensionsのコア・クラスを提供します。
Java Management Extensions (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
-
インタフェースのサマリー インタフェース 説明 Descriptor JMX要素の追加メタデータです。DescriptorAccess このインタフェースは、JMXコンポーネントに関連付けられたDescriptorクラスの記述子にアクセスするために使用されます。DescriptorRead MBeanInfoなどの管理インタフェース要素のDescriptorを読み取るためのインタフェースです。DynamicMBean Dynamic MBean (動的管理インタフェースを公開するMBean)に実装するメソッドを定義します。MBeanRegistration MBeanサーバーへの登録またはMBeanサーバーからの登録解除の前後にさまざまなオペレーションを実行するため、MBeanにより実装されます。MBeanServer エージェント側でMBeanを操作するためのインタフェースです。MBeanServerConnection このインタフェースは、MBeanサーバー(ローカルまたはリモート)との通信方法を示します。MBeanServerDelegateMBean MBeanServerDelegateクラスのオブジェクトの管理インタフェースを定義します。NotificationBroadcaster Notificationを発行するMBeanが実装しているインタフェースです。NotificationEmitter Notificationを発行するMBeanが実装しているインタフェースです。NotificationFilter 通知フィルタとして機能するすべてのクラスによって実装されます。NotificationListener 通知の受信を望むオブジェクトによって実装される必要があります。PersistentMBean このクラスは、MBeanによって実装されるインタフェース(永続インタフェース)です。QueryExp データベース・クエリーの「WHERE句」に似た関係制約を表します。ValueExp 関係式の引数として渡すことができる値を表します。 -
クラスのサマリー クラス 説明 Attribute 名前と値を関連付けることにより、MBean属性を表現します。AttributeChangeNotification MBeanによって送信される属性変更通知を定義します。AttributeChangeNotificationFilter このクラスは、attribute change notification
のNotificationFilter
インタフェースを実装します。AttributeList MBeanの属性の値のリストを表します。AttributeValueExp 関係制約の引数として使用される属性を表します。DefaultLoaderRepository 非推奨。 代わりにMBeanServer.getClassLoaderRepository()
を使用してください。ImmutableDescriptor 不変記述子。JMX JMX APIからのstaticメソッドです。MBeanAttributeInfo 管理用として公開されるMBean属性を記述します。MBeanConstructorInfo MBeanによって公開されるコンストラクタを記述します。MBeanFeatureInfo MBean記述子オブジェクトに一般情報を提供します。MBeanInfo MBeanによって公開された管理インタフェース(管理オペレーションに使用できる属性と操作のセット)を記述します。MBeanNotificationInfo MBeanNotificationInfo
クラスは、MBeanによって発行された、指定の通知Javaクラスに対する複数の異なった通知インスタンスの特性を記述します。MBeanOperationInfo MBeanによって公開される管理オペレーションを記述します。MBeanParameterInfo MBeanによって公開されるオペレーションの引数を記述します。MBeanPermission MBeanServerオペレーションのアクセスを制御するアクセス権です。MBeanServerBuilder このクラスは、デフォルトのMBeanServer
実装を作成するビルダーを表します。MBeanServerDelegate 管理の視点でMBeanサーバーを表現します。MBeanServerFactory MBeanサーバー参照を提供します。MBeanServerInvocationHandler MBeanの管理インタフェースに含まれるメソッドをMBeanサーバー経由でMBeanに転送するInvocationHandler
です。MBeanServerNotification MBeanサーバーにより、MBeanServerDelegate MBeanから発行される通知を表します。MBeanServerPermission MBeanServer関連のアクションを実行するためのアクセス権です。MBeanTrustPermission このアクセス権は、署名者またはコード・ベースの「trust」を表します。Notification Notificationクラスは、MBeanが発行する通知を表します。NotificationBroadcasterSupport NotificationEmitter
インタフェースの実装を提供します。NotificationFilterSupport NotificationFilter
インタフェースの実装を提供します。ObjectInstance MBeanのオブジェクト名とクラス名を表します。ObjectName MBeanのオブジェクト名、または複数のMBean名に一致するパターンを表します。Query クエリー・オブジェクト制約を構築します。QueryEval 特定のMBeanサーバーのコンテキストでクエリーを実行します。StandardEmitterMBean Javaインタフェースのリフレクションによって管理インタフェースを決定し、通知を発行するMBeanです。StandardMBean Javaインタフェースのリフレクションによって管理インタフェースを決定するMBeanです。StringValueExp 関係制約の引数になる文字列を表します。 -
例外のサマリー 例外 説明 AttributeNotFoundException 指定された属性が存在しないか、取得できません。BadAttributeValueExpException クエリーを構築するメソッドに無効なMBean属性が渡された場合にスローされます。BadBinaryOpValueExpException クエリーを構築するメソッドに無効な式が渡された場合にスローされます。BadStringOperationException クエリーを構築するメソッドに無効な文字列オペレーションが渡された場合にスローされます。InstanceAlreadyExistsException MBeanはすでにリポジトリに登録されています。InstanceNotFoundException 指定されたMBeanがリポジトリ内に存在しません。IntrospectionException MBeanのイントロスペクションの実行時に発生した例外です。InvalidApplicationException MBeanへのサブクエリー式またはMBeanへの修飾属性式のクラスが間違っている場合にスローされます。InvalidAttributeValueException 指定された値は、属性に対する有効な値ではありません。JMException JMX実装からスローされる例外です。JMRuntimeException JMX実装から返される実行時例外です。ListenerNotFoundException 指定されたMBeanリスナーがリポジトリ内に存在しません。MalformedObjectNameException 文字列の形式が有効なObjectNameに対応していません。MBeanException エージェント内のMBeanメソッドによってスローされるユーザー定義の例外を表します。MBeanRegistrationException MBeanRegistration
インタフェースのpreRegister()メソッドとpreDeregister()メソッドによってスローされる例外をラップします。NotCompliantMBeanException MBeanサーバーにJMX準拠のMBeanでないオブジェクトを登録しようとした場合に発行される例外です。OperationsException MBeanのオペレーションの実行時に、MBeanサーバー内でスローされる例外を表します。ReflectionException java.lang.reflectクラスを使ってMBean上のメソッドを呼び出すとき、MBeanサーバー内でスローされる例外を表します。RuntimeErrorException エージェント内でjava.lang.Error
が発生した場合、キャッチして、RuntimeErrorException
として再スローする必要があります。RuntimeMBeanException エージェント内のMBeanメソッドによってスローされる実行時例外を表します。RuntimeOperationsException MBeanでオペレーションの実行時にエージェント内でスローされる実行時例外を表します。ServiceNotFoundException 要求されたサービスがサポートされていない場合に発行される例外を表します。 -
注釈型のサマリー 注釈型 説明 ConstructorParameters コンストラクタの注釈。構築されたオブジェクトのgetterメソッドにこのコンストラクタのパラメータがどのように対応するかを示します。DescriptorKey 注釈要素とDescriptor
内のフィールドとの関係を記述するメタ注釈です。MXBean インタフェースに対して、MXBeanインタフェースである、またはMXBeanインタフェースではないというマークを明示的に付けるための注釈です。