JMXの基本的な紹介

1前書き

  • Java Management Extensions(JMX)フレームワーク** は、Java 1.5で導入され、その開始以来、Java開発者コミュニティで広く受け入れられています。

これは、ローカルまたはリモートでJavaアプリケーションを管理するための、構成が簡単で、スケーラブルで、信頼性が高く、多少なりとも親切なインフラストラクチャを提供します。このフレームワークは、アプリケーションのリアルタイム管理のためのMBeanの概念を紹介しています。

この記事は、基本的なMBeanを作成および設定し、それをJConsoleで管理するための初心者向けのステップバイステップガイドです。

2 JMXアーキテクチャ

JMXアーキテクチャーは3層のアプローチに従います。

  1. Instrumentation layer: MBeanはJMXエージェントに登録されています

どのリソースが管理されているか 。 JMXエージェント層: 維持するコアコンポーネント(MbeanServer)

管理対象MBeanのレジストリと、それらにアクセスするためのインタフェースを提供します。 。 リモート管理層: 通常JConsoleのようなクライアントサイドツール

3. MBeanクラスの作成

MBeanを作成する際には、準拠しなければならない特定のデザインパターンがあります。モデルMBeanクラスは、次の名前のインタフェースを実装しなければなりません: “モデルクラス名”とMBean .

それでは、MBeanインターフェースとそれを実装するクラスを定義しましょう。

public interface GameMBean {

    public void playFootball(String clubName);

    public String getPlayerName();

    public void setPlayerName(String playerName);

}
public class Game implements GameMBean {

    private String playerName;

    @Override
    public void playFootball(String clubName) {
        System.out.println(
          this.playerName + " playing football for " + clubName);
    }

    @Override
    public String getPlayerName() {
        System.out.println("Return playerName " + this.playerName);
        return playerName;
    }

    @Override
    public void setPlayerName(String playerName) {
        System.out.println("Set playerName to value " + playerName);
        this.playerName = playerName;
    }
}

Game クラスは、親インタフェースのメソッド playFootball() をオーバーライドします。これとは別に、クラスはメンバ変数 playerName とそれに対するgetter/setterを持ちます。

getter/setterも親インターフェースで宣言されていることに注意してください。

4 JMXエージェントを使ったインスツルメント

JMXエージェントは、ローカルまたはリモートで実行されているエンティティで、登録されているMBeanへの管理アクセスを提供します。

JMXエージェントのコアコンポーネントである PlatformMbeanServer を使用し、それに Game MBeanを登録しましょう。

Game クラスのインスタンスを PlatformMbeanServer に登録するには、別のエンティティ( __ObjectNam __e)を使用します。これは2つの部分からなるStringです。

  • domain :任意の文字列にすることができますが、MBeanの命名に従います。

慣習上、Javaパッケージ名を使用する必要があります(名前の競合を避けます)。 key:** カンマで区切られた“ key = value ”のペアのリスト

この例では、これが ObjectName です。

“ com.baledung.tutorial:type = basic、name = game”

ファクトリクラス java.lang.management.ManagementFactory から MBeanServer を取得します。

MBeanServer server = ManagementFactory.getPlatformMBeanServer();

そして、そのカスタム ObjectName を使用してモデルMBeanクラスを登録します。

ObjectName objectName = null;
try {
    objectName = new ObjectName("com.baeldung.tutorial:type=basic,name=game");
} catch (MalformedObjectNameException e) {
    e.printStackTrace();
}

最後に、テストできるようにするために、JConsoleを通じてMBeanにアクセスする前にアプリケーションが終了しないように while ループを追加します。

while (true) {
}

5 MBeanへのアクセス

5.1. クライアント側からの接続

  1. Eclipseでアプリケーションを起動します

  2. Jconsoleを起動します(JDKインストールのbinフォルダにあります).

あなたのマシンのディレクトリ) 。[接続] - >[新しい接続] - >このローカルJavaプロセスを選択します。

チュートリアル - >接続 - >安全でないSSl接続の警告 - >続行 安全でない接続 。接続が確立したら、右上の[MBean]タブをクリックします。

ビューペイン 。登録済みMBeanのリストが左側の列に表示されます。

  1. com.baeldung.tutorial - >基本 - >ゲームをクリックしてください.

  2. ゲーム中では、属性と属性にそれぞれ1行ずつ、2行あります

オペレーション

プロセスのJConsole部分を簡単に見てみましょう。

リンク:/uploads/edited jmx tutorial-768x431.gif%20768w[]

5.2. MBeanの管理

MBean管理の基本は簡単です。

  • 属性は読み書き可能

  • メソッドを呼び出すことができ、引数をそれらに渡すことができますまたは値

彼らから戻った

実際に Game MBeanにとってそれが何を意味するのか見てみましょう。

  • attribute : 属性 playerName に新しい値を入力します - for

例 "Messi"をクリックして** 更新ボタン+

次のログがEclipseコンソールに表示されます。

playerNameを値Messi に設定します

  • operations : methodのString引数に値を入力する

playFootBall() - 例えば“ Barcelona”と入力し、メソッドボタンをクリックしてください。 呼び出しが成功したことを知らせる ウィンドウアラートが表示されます。

次のログがEclipseのコンソールに表示されます。

Messiはバルセロナのサッカーをしています

6. 結論

このチュートリアルでは、MBeanを使用してJMX対応アプリケーションを設定するための基本について説明しました。また、計測されたMBeanを管理するためのJConsoleのような典型的なクライアントサイドツールの使用についても説明しました。

JMXテクノロジの領域は、その範囲と範囲が非常に広いです。このチュートリアルは、それに向けた初心者向けのステップと考えることができます。

このチュートリアルのソースコードはhttps://github.com/eugenp/tutorials/tree/master/core-java/src/main/java/com/baeldung/jmx[over on Github]にあります。

前の投稿:Javaループの手引き
次の投稿:Javaでストリームをマージする