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

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

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

カスタム MBean のインスツルメントと登録

この章では、アプリケーション モジュール用の標準 MBean をインスツルメントおよび登録するための推奨プロセスについて説明します。図 4-1 に、そのプロセスを示します。このプロセスの手順、および各手順の結果については、表 4-1 を参照してください。以降の節では、各手順について詳しく説明します。

図 4-1 標準 MBean 開発の概要

標準 MBean 開発の概要


 

表 4-1 モデル MBean の開発タスクと結果

手順

説明

結果

1. 管理インタフェースの作成と実装

JMX クライアントにエクスポーズするプロパティ (管理属性) と処理を記述する標準 Java インタフェースを作成する。

インタフェースを実装する Java クラスを作成する。管理ロジックはビジネス ロジックから分離する必要があるため、実装はビジネス メソッドを持つクラスには配置しないこと。

管理インタフェースを記述および実装するソース ファイル。

2. ビジネス メソッドの修正によるデータのプッシュ

ビジネス メソッドが呼び出された回数に関するデータが管理属性に含まれている場合、または管理属性にビジネス プロパティと同じ値を格納する場合、ビジネス メソッドが管理実装クラスにデータをプッシュ (更新) するように修正する。

たとえば、ビジネス クラスがデータベースに書き込む頻度をトラッキングする場合、データベースの書き込みを処理するビジネス メソッドが同時に管理実装クラスのカウンタ プロパティを増分するように修正する。この設計パターンを使用すると、ビジネス コードに挿入する管理コードを最小限に抑えることができる。

ビジネス ロジックと管理ロジックの明確な分離。

3.ApplicationLifecycleListener の作成と登録

MBean をアプリケーション デプロイメントの一部としてインスタンス化する場合、MBean 記述を含むクラスを weblogic-application.xml に登録する。

weblogic-application.xml へのエントリの追加。

4. アプリケーションと MBean クラスのパッケージ化

コンパイル済みのクラスを 1 つのアーカイブにパッケージ化する。

JAR、WAR、EAR ファイルまたはデプロイ可能なアーカイブ ファイル。

 


管理インタフェースの作成と実装

標準 MBean 設計パターンの主要なメリットの 1 つは、管理プロパティ (属性) の定義と実装を Java プロパティの場合と同じ方法で (ゲッターおよびセッター メソッドを使用して) 行うことです。同様に、管理メソッド (処理) の定義と実装も Java メソッドの場合と同じように行います。

MBean を登録した場合、MBean サーバは MBean インタフェースを調べて、データを JMX クライアントに提示する方法を決定します。次に、JMX クライアントは MBeanServerConnection.getAttribute() および setAttribute() メソッドを使用して MBean の値を取得および設定し、MBeanServerConnection.invoke() を使用してその処理を呼び出します。J2SE 5.0 API 仕様の「MBeanServerConnection」を参照してください。

標準 MBean のインタフェースを作成するには、次の手順に従います。

  1. インタフェースをパブリックとして宣言します。
  2. インタフェースには次の名前を付けることをお勧めします。
    Business-objectMBean.java
  3. Business-object は管理対象のオブジェクトです。

    標準 MBean の推奨設計パターンを使用すると、どのような命名規約にも従うことができます。それ以外の標準 MBean 設計パターン (MBean の実装ファイルが javax.management.StandardMBean の拡張ではないパターン) では、ファイル名は Impl-fileMBean.java というパターンに従う必要があります (Impl-file は MBean の実装ファイルの名前)。

  4. MBean で提供する読み書き属性ごとに、次の命名パターンに従ってゲッターおよびセッター メソッドを定義します。
  5. getAttribute-name
    setAttribute-name

    Attribute-name は、JMX クライアントにエクスポーズする名前です (大文字と小文字は区別される)。

    各自のコーディング規約により、Boolean 型の属性のゲッター メソッドとして isAttribute-name を使用することもできます。しかし、JMX クライアントは属性のデータ型に関係なく MBeanServerConnection.getAttribute() メソッドでその値を取得します。MBeanServerConnection.isAttribute() というメソッドは存在しません。

  6. 提供する読み取り専用属性ごとに、is のみ、またはゲッター メソッドを定義します。
  7. 書き込み専用属性ごとに、セッター メソッドを定義します。

  8. JMX クライアントにエクスポーズする各管理処理を定義します。

コード リスト 4-1 は、int 型の読み取り専用属性と、JMX クライアントがその属性値を 0 に設定するために使用する処理を定義する MBean インタフェースです。

コード リスト 4-1 管理インタフェース

package com.bea.medrec.controller;
public interface RecordSessionEJBMBean {
   public int getTotalRx();
   public void resetTotalRx();
}

このインタフェースを実装するには、次の手順に従います。

  1. パブリック クラスを作成します。
  2. 実装ファイルの命名規約として、MBean-InterfaceImpl.java というパターンを使用することをお勧めします。

  3. javax.management.StandardMBean を拡張して、このパターンが命名要件を満たすようにします。
  4. J2SE 5.0 API 仕様の「StandardMBean」を参照してください。

  5. StandardMBean(Object implementation, Class mbeanInterface) コンストラクタを実装します。
  6. 管理ロジックを委託クラスに分離する推奨設計パターンでは、StandardMBean(Object implementation, Class mbeanInterface) コンストラクタを実装するパブリック コンストラクタを提供する必要があります。

  7. 管理インタフェースで定義したメソッドを実装します。
  8. 以下のガイドラインに留意してください。

コード リスト 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 のメソッドを示します。

コード リスト 4-3 管理属性を増分する EJB メソッド

private Collection addRxs(Collection rXs, RecordLocal recordLocal)
   throws CreateException, Exception {
   ...
   com.bea.medrec.controller.RecordSessionEJBMBeanImpl.incrementTotalRx();
   ...
}

 


ApplicationLifecycleListener の作成と登録

MBean をアプリケーション デプロイメントの一部としてインスタンス化する場合、次の手順に従います (「ApplicationLifecycleListener を使用したアプリケーション MBean の登録」を参照)。

  1. weblogic.application.ApplicationLifecycleListener の拡張クラスを作成します。
  2. この ApplicationLifecycleListener クラスに、ApplicationLifecycleListener.postStart(ApplicationLifecycleEvent evt) メソッドを実装します。
  3. このメソッドの実装で以下を行います。

    1. MBean のオブジェクト名を定義します。
    2. 推奨される命名規約は次のとおりです。
      your.company:Name=Parent-module,Type=MBean-interface-classname

      親モジュールの名前を取得するために、ApplicationLifecycleEvent を使用して ApplicationContext オブジェクトを取得します。次に、ApplicationContext を使用してモジュールの ID を取得します。

    3. JNDI を介して WebLogic Server 実行時 MBean サーバにアクセスします。
    4. JMX クライアントのクラスが EJB や Web アプリケーションなどの J2EE モジュールの一部である場合、実行時 MBean サーバの JNDI 名は次のようになります。
      java:comp/env/jmx/runtime

      JMX クライアントのクラスが J2EE モジュールの一部ではない場合、実行時 MBean サーバの JNDI 名は次のようになります。
      java:comp/jmx/runtime

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

    5. MBeanServer.registerMBean(Object object, ObjectName name) を使用して MBean を登録します。ここで、
    6. object は MBean 実装クラスのインスタンスです。

      name は MBean の JMX オブジェクト名です。

    アプリケーションがデプロイされるときに、WebLogic デプロイメント サービスは登録されているすべてのリスナに対して ApplicationLifecycleEvent 通知を送信します。リスナは、postStart 通知を受信するとその postStart メソッドを呼び出します。『WebLogic Server アプリケーションの開発』の「Programming Application Lifecycle Events」を参照してください。

  4. 同じクラスに、ApplicationLifecycleListener.preStop(ApplicationLifecycleEvent evt) メソッドを実装します。
  5. このメソッドの実装で、次のメソッドを呼び出して MBean の登録を解除します。
    javax.management.MBeanServer.unregister(ObjectName MBean-name)

  6. 次の要素をアプリケーションの weblogic-application.xml ファイルに追加することによって、クラスを ApplicationLifecycleListener として登録します。
  7. <listener>
       <listener-class>
          fully-qualified-class-name
       </listener-class>
    </listener>

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

 


アプリケーションと MBean クラスのパッケージ化

MBean へのアクセスをどのように実現するかに応じて、アプリケーションの APP-INF ディレクトリか、モジュールの JAR、WAR、または他のタイプのアーカイブ ファイルに MBean をパッケージ化します。「その他の設計の考慮事項」を参照してください。

 

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