JMX による管理の容易なアプリケーションの開発
![]() |
![]() |
![]() |
![]() |
以下の節では、アプリケーション モジュール用の標準 MBean をインスツルメントおよび登録する方法について説明します。
図 4-1 に、MBean 開発プロセスを示します。このプロセスの手順、および各手順の結果については、表 4-1 を参照してください。以下の節では、各手順について詳しく説明します。
標準 MBean 設計パターンの主要なメリットの 1 つは、管理プロパティ (属性) の定義と実装を Java プロパティの場合と同じ方法で (get
xxx
、set
xxx
、および is
xxx
を使用して) 行うことです。同様に、管理メソッド (オペレーション) の定義と実装も Java メソッドの場合と同じように行います。
MBean を登録した場合、MBean サーバは MBean インタフェースを調べて、データを JMX クライアントに提示する方法を決定します。次に、JMX クライアントは MBeanServerConnection.getAttribute()
および setAttribute()
メソッドを使用して MBean の値を取得および設定し、MBeanServerConnection.invoke()
を使用してそのオペレーションを呼び出します。J2SE 5.0 API 仕様の「MBeanServerConnection
」を参照してください。
標準 MBean のインタフェースを作成するには、次の手順に従います。
Business-object
は管理対象のオブジェクトです。
標準 MBean の推奨設計パターンを使用すると、どのような命名規約にも従うことができます。それ以外の標準 MBean 設計パターン (MBean の実装ファイルが javax.management.StandardMBean
の拡張ではないパターン) では、ファイル名は Impl-file
MBean.java
というパターンに従う必要があります (Impl-file
は MBean の実装ファイルの名前)。
コード リスト 4-1 は、int
型の読み取り専用属性と、JMX クライアントがその属性値を 0
に設定するために使用するオペレーションを定義する MBean インタフェースです。
package com.bea.medrec.controller;
public interface RecordSessionEJBMBean {
public int getTotalRx();
public void resetTotalRx();
}
J2SE 5.0 API 仕様の「StandardMBean
」を参照してください。
管理ロジックを委託クラスに分離する推奨設計パターンでは、StandardMBean(Object implementation, Class mbeanInterface)
コンストラクタを実装するパブリック コンストラクタを提供する必要があります。
incrementTotalRx()
メソッドはビジネス メソッドで使用できますが、管理インタフェースの一部ではありません。
package com.bea.medrec.controller;
import javax.management.StandardMBean;
import com.bea.medrec.controller.RecordSessionEJBMBean;
public class RecordSessionEJBMBeanImpl extends StandardMBean
implements RecordSessionEJBMBean {
public RecordSessionEJBMBeanImpl() throws
javax.management.NotCompliantMBeanException {
super(RecordSessionEJBMBean.class);
}
public int TotalRx = 0;
public int getTotalRx() {
return TotalRx;
}
public void incrementTotalRx() {
TotalRx++;
}
public void resetTotalRx() {
TotalRx = 0;
}
}
ビジネス メソッドが呼び出された回数に関するデータが管理属性に含まれている場合、または、管理属性にビジネス プロパティと同じ値を格納する場合、ビジネス メソッドが管理実装クラスにデータをプッシュ (更新) するように修正します。
コード リスト 4-3 に、メソッドの呼び出しごとに TotalRx
プロパティの整数値を増分する EJB のメソッドを示します。
コード リスト 4-3 管理属性を増分する EJB メソッド
private Collection addRxs(Collection rXs, RecordLocal recordLocal)
throws CreateException, Exception {
...
com.bea.medrec.controller.RecordSessionEJBMBeanImpl.incrementTotalRx();
...
}
MBean をアプリケーション デプロイメントの一部としてインスタンス化する場合は、アプリケーションのデプロイ時に MBean を登録する ApplicationLifecycleListener
を作成します (「ApplicationLifecycleListener を使用したアプリケーション MBean の登録」を参照)。
ApplicationLifecycleListener
クラスに、ApplicationLifecycleListener.postStart(ApplicationLifecycleEvent evt)
メソッドを実装します。推奨される命名規約は次のとおりです。your.company
:Name=
Parent-module
,Type=
MBean-interface-classname
親モジュールの名前を取得するために、ApplicationLifecycleEvent
を使用して ApplicationContext
オブジェクトを取得します。次に、ApplicationContext
を使用してモジュールの ID を取得します。
JMX クライアントのクラスが EJB や Web アプリケーションなどの J2EE モジュールの一部である場合、実行時 MBean サーバの JNDI 名は次のようになります。java:comp/env/jmx/runtime
JMX クライアントのクラスが J2EE モジュールの一部ではない場合、実行時 MBean サーバの JNDI 名は次のようになります。java:comp/jmx/runtime
InitialContext ctx = new InitialContext();
MBeanServer server = (MBeanServer)
ctx.lookup("java:comp/env/jmx/runtime");
『JMX によるカスタム管理ユーティリティの開発』の「実行時 MBean サーバへのローカル接続の作成」を参照してください。
アプリケーションがデプロイされるときに、WebLogic デプロイメント サービスは登録されているすべてのリスナに対して ApplicationLifecycleEvent
通知を送信します。リスナは、postStart
通知を受信するとその postStart
メソッドを呼び出します。『WebLogic Server アプリケーションの開発』の「アプリケーション ライフサイクル イベントのプログラミング」を参照してください。
この方法の例については、MedRec サンプル サーバを参照してください。
MBean へのアクセスをどのように実現するかに応じて、アプリケーションの APP-INF
ディレクトリか、モジュールの JAR、WAR、または他のタイプのアーカイブ ファイルに MBean をパッケージ化します。「その他の設計の考慮事項」を参照してください。
![]() ![]() |
![]() |
![]() |