Oracle® Fusion Middleware Oracle WebLogic Server JMXによる管理の容易なアプリケーションの開発 11g リリース1 (10.3.5) B55538-04 |
|
前 |
次 |
以下の節では、アプリケーション・モジュール用の標準MBeanをインストゥルメントおよび登録する方法について説明します。
図4-1に、MBean開発プロセスを示します。プロセスの手順、および各手順の結果については、「表4-1」を参照してください。以下の節では、各手順について詳しく説明します。
表4-1 モデルMBeanの開発タスクと結果
手順 | 説明 | 結果 |
---|---|---|
JMXクライアントに公開するプロパティ(管理属性)と操作を記述する標準Javaインタフェースを作成します。 インタフェースを実装するJavaクラスを作成します。管理ロジックはビジネス・ロジックから分離する必要があるため、実装はビジネス・メソッドを持つクラスに配置しないでください。 |
管理インタフェースを記述および実装するソース・ファイル。 |
|
ビジネス・メソッドが呼び出された回数に関するデータが管理属性に含まれている場合、または、管理属性にビジネス・プロパティと同じ値を格納する場合、ビジネス・メソッドが管理実装クラスにデータをプッシュ(更新)するように修正します。 たとえば、ビジネス・クラスがデータベースに書き込む頻度を追跡する場合、データベースの書込みを処理するビジネス・メソッドが同時に管理実装クラスのカウンタ・プロパティをインクリメントするように修正します。この設計パターンを使用すると、ビジネス・コードに挿入する管理コードを最小限に抑えることができます。 |
ビジネス・ロジックと管理ロジックの明確な分離。 |
|
3. MBeanの登録 |
MBeanをアプリケーション・デプロイメントの一部としてインスタンス化する場合、WebLogic Server |
Javaクラスと |
コンパイル済みのクラスを1つのアーカイブにパッケージ化します。 |
JAR、WAR、EARファイルまたはデプロイ可能なアーカイブ・ファイル。 |
標準MBean設計パターンの主要なメリットの1つは、管理プロパティ(属性)の定義と実装をJavaプロパティの場合と同じ方法で( getxxx
、setxxx
、およびisxxx
メソッドを使用して)行うことです。同様に、管理メソッド(操作)の定義と実装もJavaメソッドの場合と同じように行います。
MBeanを登録した場合、MBeanサーバーはMBeanインタフェースを調べて、データをJMXクライアントに提示する方法を決定します。次に、JMXクライアントはMBeanServerConnection.getAttribute()
およびsetAttribute()
メソッドを使用してMBeanの値を取得および設定し、MBeanServerConnection.invoke()
を使用してその操作を呼び出します。http://download.oracle.com/javase/6/docs/api/javax/management/MBeanServerConnection.html
にあるJ2SE 6.0 API仕様の「MBeanServerConnection
」を参照してください。
標準MBeanのインタフェースを作成するには:
インタフェースをパブリックとして宣言します。
インタフェースには次の名前を付けることをお薦めします。
Business-objectMBean.java
Business-object
は管理対象のオブジェクトです。
標準MBeanの推奨設計パターンを使用すると、どのようなネーミング・ルールにも従うことができます。それ以外の標準MBean設計パターン(MBeanの実装ファイルがjavax.management.StandardMBean
の拡張ではないパターン)では、ファイル名はImpl-file
MBean.javaというパターンに従う必要があります(Impl-file
はMBeanの実装ファイルの名前です)。
MBeanで提供する読み書き属性ごとに、次の命名パターンに従ってゲッターおよびセッター・メソッドを定義します。
getAttribute-name
setAttribute-name
Attribute-name
は、JMXクライアントに公開する名前です(大文字と小文字は区別されます)。
各自のコーディング規約により、Boolean型の属性のゲッター・メソッドとしてis
Attribute-name
を使用することもできます。しかし、JMXクライアントは属性のデータ型に関係なくMBeanServerConnection.getAttribute()
メソッドでその値を取得します。MBeanServerConnection.isAttribute()
というメソッドは存在しません。
提供する読取り専用属性ごとに、is
またはgetterメソッドのみを定義します。
書込み専用属性ごとに、セッター・メソッドを定義します。
JMXクライアントに公開する各管理操作を定義します。
例4-1は、int
型の読取り専用属性と、JMXクライアントがその属性値を0
に設定するために使用する操作を定義するMBeanインタフェースです。
例4-1 管理インタフェース
package com.bea.medrec.controller; public interface RecordSessionEJBMBean { public int getTotalRx(); public void resetTotalRx(); }
このインタフェースを実装するには:
パブリック・クラスを作成します。
実装ファイルのネーミング・ルールとして、MBean-Interface
Impl.java
というパターンを使用することをお薦めします。
javax.management.StandardMBean
を拡張して、このパターンが命名要件を満たすようにします。
http://download.oracle.com/javase/6/docs/api/javax/management/StandardMBean.html
にあるJ2SE 6.0 API仕様の「StandardMBean
」を参照してください。
StandardMBean(Object implementation, Class mbeanInterface)
コンストラクタを実装します。
管理ロジックを委託クラスに分離する推奨設計パターンでは、StandardMBean(Object implementation, Class mbeanInterface)
コンストラクタを実装するパブリック・コンストラクタを提供する必要があります。
管理インタフェースで定義したメソッドを実装します。
以下のガイドラインに従ってください。
ビジネス・オブジェクトが管理データを管理オブジェクトにプッシュする推奨設計パターンでは、ビジネス・メソッドが管理属性の値を設定するために使用するメソッドをこの実装クラスに組み込みます。例4-2では、incrementTotalRx()
メソッドはビジネス・メソッドで使用できますが、管理インタフェースの一部ではありません。
EJB、サーブレット、またはその他のクラスの複数のインスタンスが管理属性の値を設定できる場合、プロパティが個別にインクリメントされるようにし、またそのゲッターおよびセッター・メソッド(またはインクリメント・メソッド)が同期されないようにしてください。同期化によって管理データの正確さは保証されますが、管理操作が完了するまでビジネス・スレッドがブロックされます。
例4-2 MBeanの実装
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のメソッドを示します。
MBeanをアプリケーション・デプロイメントの一部としてインスタンス化する場合は、アプリケーションのデプロイ時にMBeanを登録するApplicationLifecycleListener
を作成します(「ApplicationLifecycleListenerを使用したアプリケーションMBeanの登録」を参照)。
weblogic.application.ApplicationLifecycleListener
の拡張クラスを作成します。
このApplicationLifecycleListener
クラスに、ApplicationLifecycleListener.postStart(ApplicationLifecycleEvent evt)
メソッドを実装します。
このメソッドの実装で以下を行います。
MBeanのオブジェクト名を定義します。
以下のネーミング・ルールを使用することをお薦めします。
your.company:Name=Parent-module,Type=MBean-interface-classname
親モジュールの名前を取得するために、ApplicationLifecycleEvent
を使用してApplicationContext
オブジェクトを取得します。次に、ApplicationContext
を使用してモジュールのIDを取得します。
MBeanがWebLogic Server実行時MBeanサーバーに登録する場合は、次の操作を行います。
JNDIを介してWebLogic Server実行時MBeanサーバーにアクセスします。
JMXクライアントのクラスがEJBやWebアプリケーションなどのJava EEモジュールの一部である場合、実行時MBeanサーバーのJNDI名は次のようになります。
java:comp/env/jmx/runtime
例:
InitialContext ctx = new InitialContext(); MBeanServer server = (MBeanServer) ctx.lookup("java:comp/env/jmx/runtime");
JMXクライアントのクラスがJava EEモジュールの一部ではない場合、実行時MBeanサーバーのJNDI名は次のようになります。
java:comp/jmx/runtime
『Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』の実行時MBeanサーバーへのローカル接続に関する項を参照してください。
MBeanが ドメイン実行時MBeanサーバーに登録されている場合は、次の操作を行います。
JNDIを介して ドメイン 実行時MBeanサーバーにアクセスします。
JMXクライアントのクラスがEJBやWebアプリケーションなどのJava EEモジュールの一部である場合、ドメイン実行時MBeanサーバーのJNDI名は次のようになります。
java:comp/env/jmx/domainRuntime
例:
Initial context ctx = new InitialContext(); server = (MBeanServer)ctx.lookup("java:comp/env/jmx/domainRuntime");
JMXクライアントのクラスがJava EEモジュールの一部ではない場合、ドメイン実行時MBeanサーバーのJNDI名は次のようになります。
java:comp/jmx/domainRuntime
注意: ドメイン実行時MBeanサーバーは管理サーバーにのみ存在します。ctx.lookup() コールは、 ローカルMBeanサーバーに参照を返すので、lookupメソッドは管理サーバーで実行する場合にのみ呼び出します。管理対象サーバーで実行するとき、このメソッドを呼び出すと、NameNotFound 例外が送出されます。 |
『Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』のドメインの実行時MBeanサーバーへのローカル接続に関する項を参照してください。
MBeanServer.registerMBean(Object
object
, ObjectName name)
を使用してMBeanを登録します。ここで、
object
はMBean実装クラスのインスタンスです。
name
はMBeanのJMXオブジェクト名です。
アプリケーションがデプロイされるときに、WebLogicデプロイメント・サービスは登録されているすべてのリスナーに対してApplicationLifecycleEvent
通知を送信します。リスナーは、postStart
通知を受信するとそのpostStart
メソッドを呼び出します。『Oracle 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クラスをパッケージ化します。「その他の設計の考慮事項」を参照してください。