Oracle® Fusion Middleware Oracle WebLogic Server JMX による管理の容易なアプリケーションの開発 11g リリース 1 (10.3.1) B55538-01 |
|
戻る |
次へ |
Java Management Extensions (JMX) は、Java アプリケーションをモニタおよび管理するための仕様です。JMX を使用すると、汎用管理システムでアプリケーションをモニタし、注意が必要なときに通知を生成し、アプリケーションの状態を変更して問題を解決できます。JMX は SNMP および他の管理規格と同様に公開された仕様であり、一般的に用いられるモニタ用製品を扱うベンダの多くでサポートされています。
WebLogic Server は、JDK 6 に含まれている Java Management Extensions (JMX) 1.2 実装を使用します。以下の節では、Java アプリケーションで JMX を使用して実行時メトリックと制御ポイントを管理システムに通知する方法について説明します。
WebLogic Server で Java EE アプリケーションを管理するために使用できるその他の API およびユーティリティについては、『Oracle Fusion Middleware Oracle WebLogic Server の紹介』の「WebLogic Server システム管理の概要」を参照してください。
アプリケーションのモニタと管理に使用する場合、JMX は通常、管理アプリケーションが管理データを収集する Java クラスのプロパティにアクセスできるようにします (図 2-1を参照)。 多くの場合、これらのクラス プロパティは、アプリケーションが消費するリソースを追跡する単純なカウンタです。また、JMX は、アプリケーションのプロセスの開始または停止、またはクラス プロパティ値のリセットを行う Java クラスのメソッドへのアクセスも提供します。JMX を介して管理データをエクスポーズするクラスを、管理対象 Bean (MBean) と言います。また、MBean を介してエクスポーズされるクラス プロパティを属性、メソッドをオペレーションと言います。
JMX 対応管理ユーティリティへのこのようなアクセスを実現したら、システム管理者または運用スタッフは管理データをシステムの全体図に統合できます。JMX 管理ユーティリティを使用することで、MBean 属性の現在の値を参照したり、JMX モニタを設定して MBean 属性値を定期的にポーリングしたり、属性値が特定のしきい値を超えた場合にのみ管理ユーティリティに通知が送信されるようにしたりできます。
システム管理者または運用スタッフにすべての管理責任を負わせる代わりに、MBean をモニタする管理対応アプリケーションを作成して、一部のタスクを自動的に実行することができます。次に例を示します。
接続プールをモニタし、必要に応じてプールを拡張または縮小するアプリケーション。
デプロイされているアプリケーションすべてをモニタするポータル アプリケーション。新しいアプリケーションがデプロイされた場合、ポータル アプリケーションはそのアプリケーションを新しいポートレットとして自動的に表示します。
コネクタ モジュールのデプロイメントをリスンし、新しくデプロイされたモジュールを使用するアプリケーション。
データベース、JMS 接続、JMS キャッシュなど、リソースを大量に消費する重要な Java EE アプリケーションは、そのリソース消費をモニタする機能を備えている必要があります。このようなアプリケーションでは、データベースに対する読み書きが常に行われるため、ロギング機能を使用して読み書き処理のたびにメッセージを出力することは不可能です。このようなモニタ機能の場合、JMX を使用することによって、容易に管理でき、ネットワーク リソースの利用を最適化する管理 (インスツルメンテーション) コードを記述できます。
アプリケーションの基本的な実行時メトリックをモニタする場合は、WebLogic Server に用意されているさまざまな独自の MBean を使用できます (『Oracle Fusion Middleware Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』の「ベスト プラクティス : WebLogic Server イベントのリスン」を参照)。たとえば、既存の WebLogic Server MBean を使用してアプリケーションのサーブレットのヒット率や、サーブレット リクエストの処理時間を追跡できます。
WebLogic Server MBean はオペレーション センターに対してリソースの全般的な状態を通知できますが、特定のアプリケーションがどのようにリソースを使用しているかについての詳細な情報は提供できません。たとえば、WebLogic Server MBean は接続プール内の使用中の接続数を通知することはできますが、接続プールを使用しているアプリケーションは通知できません。ドメインに複数のアクティブなアプリケーションが存在し、一部の接続が常に使用されていることに気づいた場合、各アプリケーションがいつ接続を取得し、解放するかをモニタする MBean を作成します。また、停止していると見なされたセッションを終了する管理オペレーションを組み込むこともできます。
さらに、アプリケーションが独自のキャッシュを作成および保持し、アプリケーション コンテナの制御下にないデータ リポジトリに書き込む場合、そのキャッシュのサイズまたはリポジトリに書き込まれるデータの量をモニタする MBean を作成します。
Java EE と同じように、JMX はコンポーネント ベースの技術であり、さまざまな種類のベンダが多様なコンポーネントを提供しています。こうした分業化によって、各ベンダはそれぞれの専門分野のソフトウェアだけの開発に専念できます。JMX では、これらのコンポーネントは以下のレイヤにまとめられます。
インスツルメンテーション
開発するアプリケーション、リソース、およびその他の管理が容易なオブジェクトで構成されます。このレイヤでは、アプリケーション開発者が管理対象 Bean (MBean) を作成します。MBean は、外部の管理システムにエクスポーズするプロパティ (属性) とメソッド (オペレーション) を備えています。
エージェント
JVM とアプリケーション サーバ (WebLogic Server など) で構成されます。このレイヤには、MBean のレジストリと、MBean の作成、破棄、およびアクセスを行うための標準インタフェースが含まれます。
また、エージェント レイヤには、モニタおよびタイマー サービスに加えてリモート クライアント用のサービスが含まれます。『Oracle Fusion Middleware Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』の「WebLogic Server JMX タイマー サービスの使用」および「通知とモニタ MBean の使い方」を参照してください。
分散サービス
管理コンソールまたはその他の Java EE アプリケーションで構成されます。管理アプリケーションがエージェント レイヤのリクエストを送受信します。多くの場合、このレイヤは管理コンソールがさまざまな管理プロトコル (JMX や SNMP など) をサポートできるようにするためのプラグインまたはアダプタとして使用できます。
JMX を理解するための 2 つの主要な概念は、間接性と内部参照です。これらの概念を採用することで、JMX アプリケーションは独自のクラス定義にアクセスすることなく独自のリソースを管理できるようになります。
JMX の一般的なモデルでは、分散サービス レイヤに属するアプリケーションは、インスツルメント レイヤに属するクラスと直接対話することがありません。代わりに、この間接性のモデルでは、JMX エージェント レイヤは以下のことを行う標準インタフェース (javax.management.MBeanServerConnection
など) を提供します。
クラス管理インタフェースを分散サービス レイヤの管理クライアントにエクスポーズする
管理クライアントからリクエスト (クラスが JMX を介してエクスポーズするプロパティの値を取得するためのリクエストなど) を受け取る
クラスと対話してリクエストを実行し、その結果を管理クライアントに返す
各クラスは、JMX を介してエクスポーズするプロパティとメソッドのセットを MBean サーバに通知します。クラスが JMX を介してエクスポーズするプロパティを MBean 属性と呼び、公開するメソッドをオペレーションと呼びます。JMX は、クラスがその属性とオペレーションを通知するために使用できる複数の方法 (設計パターン) を指定します。これらの設計パターンは、標準、動的、モデル、オープンというタイプの MBean として形式化されています。
標準 MBean タイプを実装するクラスは、その管理インタフェースを Java プログラミングとほぼ同じ方法で記述します。開発者は、JMX を介してエクスポーズされる各クラス プロパティのゲッターおよびセッター メソッドを備えた JMX インタフェース ファイルを作成します。インタフェース ファイルには、エクスポーズされる各クラス メソッドのラッパー メソッドも含まれます。クラスは、その JMX インタフェースの名前を宣言します。標準 MBean を MBean サーバに登録すると、MBean サーバはクラスとその JMX インタフェースを内部参照して、分散サービス レイヤにエクスポーズする JMX 属性およびオペレーションを決定します。また、MBean サーバは、インタフェースを記述する MBeanInfo
オブジェクトを作成します。管理クライアントは、この MBeanInfo
オブジェクトを調べてクラスの管理インタフェースについて学びます。
モデル MBean タイプを実装するクラスは、その独自の MBeanInfo
オブジェクトを作成することによってその管理インタフェースを記述します。MBeanInfo オブジェクトは、JMX を介してエクスポーズするプロパティとメソッドを記述するメタデータ オブジェクト セットです。モデル MBean を MBean サーバに登録すると、MBean サーバはクラスを内部参照する代わりに既存の MBeanInfo
オブジェクトを使用します。
JMX では、2 通りの方法で MBean の変更をモニタできます。MBean は、特定のイベント (属性値の変更など) の発生時に通知を送信できます。また、モニタ MBean は、MBean を定期的にポーリングして属性値を取得できます。
以下の節では、JMX 通知とモニタ MBean について説明します。
MBean 作成の一部として、javax.management.NotificationEmitter
インタフェースを実装できます。これにより、MBean はさまざまな種類のイベントが発生したときに通知を送信できます。たとえば、アプリケーションによる接続プールの使用状態を管理する MBean を作成するとします。この場合、アプリケーションが接続を作成したときに通知を送信し、接続を破棄したときに別の通知を送信するように MBean をコンフィグレーションできます。
通知をリスンするには、javax.management.NotificationListener.handleNotification()
メソッドを実装するリスナ クラスを作成します。このメソッドの実装には、リスナが通知の受信時にアクションを実行するためのロジックを組み込みます。リスナ クラスを作成したら、リスナを MBean に登録する別のクラスを作成します。
デフォルトによって、MBean は登録されているすべてのリスナにすべての通知を送信します。しかし、リスナのフィルタを作成して登録することもできます。フィルタは、javax.management.NotificationFilter.isNotificationEnabled()
メソッドを実装するクラスです。このメソッドの実装では、1 つまたは複数の通知タイプを指定します。この場合、タイプは、イベントを識別する通知オブジェクト内のユニークな文字列です (vendorA.appB.eventC
など)。イベントの発生によって MBean が通知を生成する場合、MBean は通知をリスナに送信する前にフィルタの isNotificationEnabled()
メソッドを呼び出します。通知タイプが isNotificationEnabled()
で指定した値の 1 つと一致した場合、フィルタは true
を返し、MBean は関連付けられているリスナにメッセージを送信します。
リスナおよびフィルタの作成および登録については、『Oracle Fusion Middleware Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』の「WebLogic Server MBean からの通知のリスン : 主な手順」を参照してください。JMX 通知の詳細については、JMX 1.2 仕様を参照してください。「関連ドキュメント」を参照してください。
図 2-2 に、MBean が送信した通知の一部だけを通知リスナが受信する基本システムを示します。
JMX には、モニタ MBean という MBean の仕様が含まれています。モニタ MBean をインスタンス化してコンフィグレーションすることにより、他の MBean を定期的に検査できます。モニタ MBean は、特定の MBean 属性が指定されたしきい値を超えた場合に JMX 通知を送信します。モニタ MBean では、MBean の属性の値そのもの、または数値属性の 2 つの連続する値の差異 (オプション) を観察できます。モニタ MBean が観察する値は、派生ゲージと呼びます。
派生ゲージが一連の条件を満たす場合、モニタ MBean は特定の通知タイプを送信します。また、属性値のモニタ中に一定のエラー状態が発生した場合にも通知を送信できます。
モニタ MBean を使用するには、モニタをコンフィグレーションして、観察対象の MBean に登録します。次に、リスナ クラスを作成して、そのクラスをモニタ MBean に登録します。モニタ MBean は非常に特殊な種類の通知のみを送信するので、通常、モニタ MBean からの通知をリスンする際にはフィルタは使用しません。
図 2-3 に、モニタ MBean を MBean に登録する基本システムを示します。NotificationListener
がモニタ MBean に登録され、モニタ MBean 内の条件が満たされたときに通知を受信します。