![]() ![]() ![]() ![]() |
以下の節では、アプリケーション モジュール用の標準 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.java
Business-object
は管理対象のオブジェクトです。
標準 MBean の推奨設計パターンを使用すると、どのような命名規約にも従うことができます。それ以外の標準 MBean 設計パターン (MBean の実装ファイルが javax.management.StandardMBean
の拡張ではないパターン) では、ファイル名は Impl-file
MBean.java
というパターンに従う必要があります (Impl-file
は MBean の実装ファイルの名前)。
get
Attribute-name
set
Attribute-name
Attribute-name
は、JMX クライアントにエクスポーズする名前です (大文字と小文字は区別される)。
各自のコーディング規約により、Boolean
型の属性のゲッター メソッドとして is
Attribute-name
を使用することもできます。しかし、JMX クライアントは属性のデータ型に関係なく MBeanServerConnection.getAttribute()
メソッドでその値を取得します。MBeanServerConnection.isAttribute()
というメソッドは存在しません。
is
のみ、またはゲッター メソッドを定義します。
コード リスト 4-1 は、int
型の読み取り専用属性と、JMX クライアントがその属性値を 0
に設定するために使用するオペレーションを定義する MBean インタフェースです。
package com.bea.medrec.controller;
public interface RecordSessionEJBMBean {
public int getTotalRx();
public void resetTotalRx();
}
実装ファイルの命名規約として、MBean-Interface
Impl.java
というパターンを使用することをお勧めします。
javax.management.StandardMBean
を拡張して、このパターンが命名要件を満たすようにします。
J2SE 5.0 API 仕様の「StandardMBean
」を参照してください。
StandardMBean(Object implementation, Class mbeanInterface)
コンストラクタを実装します。
管理ロジックを委託クラスに分離する推奨設計パターンでは、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 のメソッドを示します。
private Collection addRxs(Collection rXs, RecordLocal recordLocal)
throws CreateException, Exception {
...
com.bea.medrec.controller.RecordSessionEJBMBeanImpl.incrementTotalRx();
...
}
MBean をアプリケーション デプロイメントの一部としてインスタンス化する場合は、アプリケーションのデプロイ時に MBean を登録する ApplicationLifecycleListener
を作成します (「ApplicationLifecycleListener を使用したアプリケーション MBean の登録」を参照)。
weblogic.application.ApplicationLifecycleListener
の拡張クラスを作成します。ApplicationLifecycleListener
クラスに、ApplicationLifecycleListener.postStart(ApplicationLifecycleEvent evt)
メソッドを実装します。
推奨される命名規約は次のとおりです。your.company
:Name=
Parent-module
,Type=
MBean-interface-classname
親モジュールの名前を取得するために、ApplicationLifecycleEvent
を使用して ApplicationContext
オブジェクトを取得します。次に、ApplicationContext
を使用してモジュールの ID を取得します。
JMX クライアントのクラスが EJB や Web アプリケーションなどの Java EE モジュールの一部である場合、実行時 MBean サーバの JNDI 名は次のようになります。java:comp/env/jmx/runtime
JMX クライアントのクラスが Java EE モジュールの一部ではない場合、実行時 MBean サーバの JNDI 名は次のようになります。java:comp/jmx/runtime
InitialContext ctx = new InitialContext();
MBeanServer server = (MBeanServer)
ctx.lookup("java:comp/env/jmx/runtime");
『JMX によるカスタム管理ユーティリティの開発』の「実行時 MBean サーバへのローカル接続の作成」を参照してください。
MBeanServer.registerMBean(Object
object
, ObjectName
name
)
を使用して MBean を登録します。ここで、
object
は MBean 実装クラスのインスタンスです。
アプリケーションがデプロイされるときに、WebLogic デプロイメント サービスは登録されているすべてのリスナに対して ApplicationLifecycleEvent
通知を送信します。リスナは、postStart
通知を受信するとその postStart
メソッドを呼び出します。『WebLogic Server アプリケーションの開発』の「アプリケーション ライフサイクル イベントのプログラミング」を参照してください。
ApplicationLifecycleListener.preStop(ApplicationLifecycleEvent evt)
メソッドを実装します。
このメソッドの実装で、次のメソッドを呼び出して MBean の登録を解除します。javax.management.MBeanServer.unregister(ObjectName
MBean-name
)
weblogic-application.xml
ファイルに追加することによって、クラスを ApplicationLifecycleListener
として登録します。
<listener>
<listener-class>
fully-qualified-class-name
</listener-class>
</listener>
この方法の例については、MedRec サンプル サーバを参照してください。
MBean へのアクセスをどのように実現するかに応じて、アプリケーションの APP-INF
ディレクトリか、モジュールの JAR、WAR、または他のタイプのアーカイブ ファイルに MBean クラスをパッケージ化します。「その他の設計の考慮事項」を参照してください。
![]() ![]() ![]() |