Oracle® Fusion Middleware Oracle WebLogic Server JMX による管理の容易なアプリケーションの開発 11g リリース 1 (10.3.1) B55538-01 |
|
戻る |
次へ |
以下の節では、アプリケーション モジュール用の標準 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://java.sun.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://java.sun.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 Fusion Middleware 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 Fusion Middleware Oracle Weblogic Server JMX によるカスタム管理ユーティリティの開発』の「ドメイン実行時 MBean サーバへのローカル接続の作成」を参照してください。
MBeanServer.registerMBean(Object
object, ObjectName
name
) を使用して MBean を登録します。ここで、
object は MBean 実装クラスのインスタンスです。
name
は MBean の JMX オブジェクト名です。
アプリケーションがデプロイされるときに、WebLogic デプロイメント サービスは登録されているすべてのリスナに対して ApplicationLifecycleEvent
通知を送信します。リスナは、postStart
通知を受信するとその postStart
メソッドを呼び出します。『Oracle Fusion Middleware 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 クラスをパッケージ化します。「その他の設計の考慮事項」を参照してください。