ナビゲーションをスキップ

JMX による管理の容易なアプリケーションの開発

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

管理の容易なアプリケーションの設計

JMX には、アプリケーションの管理を容易にするために使用できる設計パターンとデプロイメント オプションが存在します。推奨される設計パターンは、Java クラスのインスツルメンテーションが以下の条件を満たしていることを前提としています。

以降の節では、管理が容易なアプリケーションの設計について説明します。

 


ベスト プラクティス

以降の節では、管理が容易なアプリケーションを設計するための推奨事項について説明します。

標準 MBean の使用

JMX ではさまざまな設計パターンが定義されていますが、その中でも、最も簡単に記述できる標準 MBean を使用することをお勧めします。標準 MBean を使用する最も単純な設計パターンでは、以下のことを行います。

  1. エクスポーズする管理プロパティと管理処理のインタフェースを作成します。
  2. インタフェースを Java クラスに実装します。
  3. javax.management.MBeanServerConnection.createMBean() メソッドを呼び出して、管理インタフェースをこのメソッドのパラメータで渡します。

MBean サーバは、インタフェースを内部参照し、実装を見つけ、インタフェースと実装を MBean として登録します。

この設計パターンでは、管理インタフェースとその実装は、MBean サーバがインタフェースを内部参照できるように、厳格な命名規約に準拠していなければなりません。この命名要件を回避するには、Java クラスを javax.management.StandardMBean の拡張にします。J2SE 5.0 API 仕様の「StandardMBean」を参照してください。

実行時 MBean サーバの使用

JVM には、複数の MBean サーバが存在できます。設計上、ここで決定しなけれならないのは、MBean を JVM のプラットフォーム MBean サーバか WebLogic Server 実行時 MBean サーバのどちらに登録するかです。

JDK 1.5 から、JVM (ローカル プロセス) 内のプロセスはプラットフォーム MBean サーバをインスタンス化できるようになりました。この MBean は JDK によって提供され、JVM 自体をモニタするための MBean を備えています。ローカル クラスもこの MBean サーバに MBean を登録できます。

WebLogic Server インスタンス用の JVM は、プラットフォーム MBean サーバの他に実行時 MBean サーバも備えることができます。管理サーバもドメインの実行時 MBean サーバと編集 MBean サーバを備えていますが、カスタム MBean を登録できるのは実行時 MBean サーバだけです。『JMX によるカスタム管理ユーティリティの開発』の「MBean サーバ」を参照してください。

カスタム MBean は、その実行時 MBean サーバに登録することをお勧めします。その場合、以下のことに留意してください。

実行時 MBean サーバは、その javax.management.MBeanServer インタフェースを JNDI ツリーに登録します。『JMX によるカスタム管理ユーティリティの開発』の「実行時 MBean サーバへのローカル接続の作成」を参照してください。

JVM プラットフォーム MBean サーバを使用する

JMX クライアントが単一の MBean サーバを介してカスタム MBean、WebLogic Server MBean、および JVM のプラットフォーム MBean をモニタできるようにする必要がある場合、実行時 MBean サーバをプラットフォーム MBean サーバとしてコンフィグレーションできます。その場合、以下のことに留意してください。

WebLogic 実行時 MBean サーバを JDK プラットフォーム MBean サーバとしてコンフィグレーションするには、WebLogic JMXMBean PlatformMBeanServerEnabled 属性を true に設定して、ドメイン内のサーバを再起動します。『WebLogic Server MBean リファレンス』の「JMXMBean」を参照してください。

ApplicationLifecycleListener を使用したアプリケーション MBean の登録

EJB、Web アプリケーションのサーブレット、またはデプロイされているその他のモジュール用の MBean を作成し、その MBean をアプリケーションのデプロイと同時に使用できるようにする場合、デプロイメント サービスからの通知をリスンします。アプリケーションをデプロイ (およびデプロイ済みのアプリケーションが存在するサーバを起動) するときに、WebLogic Server デプロイメント サービスはデプロイメント プロセスの特定の段階で通知を送信します。アプリケーションがデプロイされたことを示す通知を受信したら、MBean を作成および登録できます。

ApplicationLifecycleListener でデプロイメント通知をリスンするには、以下の 2 つの手順を行います。

  1. weblogic.application.ApplicationLifecycleListener の拡張クラスを作成します。次に、MBean を作成して MBean サーバに登録するための ApplicationLifecycleListener.postStart メソッドを実装します。このクラスは、デプロイメント サービスからの postStart 通知の受信後に postStart() メソッドを呼び出します。『WebLogic Server アプリケーションの開発』の「Programming Application Lifecycle Events」を参照してください。
  2. weblogic-application.xml デプロイメント記述子で、作成したクラスをアプリケーション リスナ クラスとして登録します。

この方法の例については、MedRec サンプル サーバを参照してください。

JDK クラスだけを使用する代替手段

MBean がその親アプリケーションのライフサイクルを共有するようにするための最も簡単な方法は、BEA の ApplicationLifecycleListener を使用することです。独自の WebLogic Server クラスとデプロイメント記述子要素を使用せずにサーブレットまたは EJB を管理する場合、以下のことを実行します。

アプリケーションのアンデプロイ時のアプリケーション MBean の登録解除

MBean の作成方法に関係なく、アプリケーションがアンデプロイされたことを伝えるデプロイメント通知を受信したときに MBean の登録を解除することをお勧めします。このようにしない場合、メモリ リークが発生する可能性があります。

ApplicationLifecycleListener の拡張クラスを作成する場合、ApplicationLifecycleListener.preStop メソッドを実装して MBean の登録を解除できます。

EJB およびサーブレットから委託クラスへの管理ロジックの配置

任意のタイプの EJB (セッション、エンティティ、メッセージ) またはサーブレットの管理属性と管理処理をエクスポーズする場合、管理属性と管理処理を独立した委託クラスに実装して、EJB またはサーブレット実装クラスがビジネス ロジックだけで構成され、そのビジネス インタフェースがビジネス ロジックだけを表すようにすることをお勧めします。図 3-1 を参照してください。

図 3-1 管理プロパティおよび処理の委託クラスへの配置

管理プロパティおよび処理の委託クラスへの配置


 

図 3-1 では、EJB のビジネス メソッドは、そのデータを委託クラスにプッシュします。たとえば、特定のビジネス メソッドが呼び出されるたびに、そのメソッドは委託クラスのカウンタを増分し、MBean インタフェースはカウンタ値を属性としてエクスポーズします。この方法の例については、MedRec サンプル サーバを参照してください。

このようにビジネス ロジックを管理ロジックから分離した場合、特に委託クラスのカウンタが頻繁に増分されるような条件では、ロジックを同じクラスに組み込んだ場合より効率が悪くなる可能性があります。しかし、実際には、ほとんどの JVM はメソッド呼び出しを最適化することによって効率の低下をごくわずかなものにとどめます。

使用するアプリケーションでこのわずかな違いを許容できない場合、EJB のビジネス クラスに管理値を組み込み、JMX クライアントからの要求時に委託クラスがその値を取得できるようにします。

オープン MBean データ型の使用

リモート JMX クライアントがカスタム MBean にアクセスする場合、MBean 属性のデータ型と処理が返すデータ型を javax.management.openmbean.OpenType に定義したデータ型に制限することをお勧めします。すべての JVM はこれらの基本型にアクセスできます。J2SE 5.0 API 仕様の「OpenType」を参照してください。

MBean がその他のデータ型をエクスポーズする場合、それらのデータ型はシリアライズ可能でなければならず、リモート JMX クライアントのクラス パスにそれらのデータ型が存在しなければなりません。

必要時のみの通知の送信

MBean は、通知を送信するたびにメモリとネットワーク リソースを使用します。MBean 属性の値が頻繁に変更される場合、このようなメモリとリソースの利用は望ましくありません。

属性が変更されるたびに通知を送信するように MBean をコンフィグレーションする代わりに、モニタ MBean を使用してカスタム MBean を定期的にポーリングすることによって、属性が変更されたかどうかを調べることをお勧めします。モニタ MBean をコンフィグレーションすると、属性が特定の方法で変更された場合、または特定のしきい値に達した場合にのみ通知を送信できます。

詳細については、『JMX によるカスタム管理ユーティリティの開発』の「ベスト プラクティス : 直接的なリスンとモニタ」を参照してください。

 


その他の設計の考慮事項

BEA のベスト プラクティスの他に、以下のことを考慮してください。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次