Grundlegende Einführung in JMX

Grundlegende Einführung in JMX

1. Einführung

DasJava Management Extensions (JMX) framework wurde in Java 1.5 eingeführt und hat seit seiner Einführung in der Java-Entwicklergemeinde breite Akzeptanz gefunden.

Es bietet eine einfach konfigurierbare, skalierbare, zuverlässige und mehr oder weniger benutzerfreundliche Infrastruktur für die lokale oder Remote-Verwaltung von Java-Anwendungen. Das Framework führt das Konzept von MBeans für die Echtzeitverwaltung von Anwendungen ein.

Dieser Artikel ist eine Schritt-für-Schritt-Anleitung für Anfänger, um eine grundlegende MBean zu erstellen, einzurichten und über JConsole zu verwalten.

2. JMX-Architektur

Die JMX-Architektur folgt einem dreischichtigen Ansatz:

  1. Instrumentation layer: MBeans, die beim JMX-Agenten registriert sind, über den Ressourcen verwaltet werden

  2. JMX agent layer:ist die Kernkomponente (MbeanServer), die die Registrierung verwalteter MBeans verwaltet und eine Schnittstelle für den Zugriff auf diese bereitstellt

  3. Remote management layer:ist normalerweise ein clientseitiges Tool wie JConsole

3. Erstellen einer MBean-Klasse

Beim Erstellen von MBeans gibt es ein bestimmtes Entwurfsmuster, dem wir uns anpassen müssen. Die Modell-MBean-Klasse MUSS eine Schnittstelle mit dem folgenden Namen implementieren:*“model class name” plus MBean*.

Definieren wir also unsere MBean-Schnittstelle und die Klasse, die sie implementiert:

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;
    }
}

Die KlasseGame überschreibt eine MethodeplayFootball() der übergeordneten Schnittstelle. Abgesehen davon hat die Klasse eine MitgliedsvariableplayerName und einen Getter / Setter dafür.

Beachten Sie, dass Getter / Setter auch in der übergeordneten Schnittstelle deklariert sind.

4. Instrumentierung mit dem JMX Agent

JMX-Agenten sind die Einheiten, die entweder lokal oder remote ausgeführt werden und dem Management Zugriff auf die bei ihnen registrierten MBeans gewähren.

Verwenden wirPlatformMbeanServer - die Kernkomponente des JMX-Agenten und registrieren die MBeanGame damit.

Wir verwenden eine andere Entität -ObjectName -, um die Klasseninstanz vonGamebeiPlatformMbeanServerzu registrieren. Dies ist eine Zeichenfolge, die aus zwei Teilen besteht:

  • domain: kann eine beliebige Zeichenfolge sein, sollte jedoch gemäß den MBean-Namenskonventionen einen Java-Paketnamen haben (vermeidet Namenskonflikte).

  • key: ist eine Liste von "key=value" -Paaren, die durch ein Komma getrennt sind

In diesem Beispiel sind hier unsereObjectName:“com.baledung.tutorial:type=basic,name=game”. __

Wir erhalten dieMBeanServer aus der Fabrikklassejava.lang.management.ManagementFactory:

MBeanServer server = ManagementFactory.getPlatformMBeanServer();

Und wir registrieren die MBean-Modellklasse mit ihren benutzerdefiniertenObjectName:

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

Um es zu testen, fügen wir einewhile-Schleife hinzu, um zu verhindern, dass die Anwendung beendet wird, bevor wir über JConsole auf die MBean zugreifen können:

while (true) {
}

5. Zugriff auf die MBean

5.1. Herstellen einer Verbindung von der Client-Seite

  1. Starten Sie die Anwendung in der Eclipse

  2. Starten Sie Jconsole (im Ordner bin des JDK-Installationsverzeichnisses Ihres Computers).

  3. Verbindung → Neue Verbindung → Wählen Sie den lokalen Java-Prozess dieses Lernprogramms aus → Verbinden → Warnung vor unsicherer SSl-Verbindung → Fahren Sie mit unsicherer Verbindung fort

  4. Klicken Sie nach dem Herstellen der Verbindung auf die Registerkarte MBeans oben rechts im Bereich Ansicht

  5. Die Liste der registrierten MBeans wird in der linken Spalte angezeigt

  6. Klicken Sie auf com.example.tutorial → basic → game

  7. Unter Spiel gibt es zwei Reihen, eine für Attribute und Operationen

Hier ist ein kurzer Blick auf den JConsole-Teil des Prozesses:

image

5.2. MBean verwalten

Die Grundlagen der MBean-Verwaltung sind einfach:

  • Attribute können gelesen oder geschrieben werden

  • Methoden können aufgerufen und Argumente übergeben oder Werte von ihnen zurückgegeben werden

Mal sehen, was das in der Praxis für die MBeanGamebedeutet:

  • attribute: Geben Sie einen neuen Wert für das AttributplayerName ein, z. B. "Messi", und klicken Sie aufRefresh button

Das folgende Protokoll wird in der Eclipse-Konsole angezeigt:

Setze playerName auf Messi

  • operations: Geben Sie einen Wert für das String-Argument der MethodeplayFootBall() ein, z. B. "Barcelona", und klicken Sie auf die Schaltfläche "Methode". Einwindow alert for successful invocation wird angezeigt

Das folgende Protokoll wird in der Eclipse-Konsole angezeigt:

Messi spielt Fußball für Barcelona

6. Fazit

In diesem Tutorial wurden die Grundlagen zum Einrichten einer JMX-fähigen Anwendung mithilfe von MBeans behandelt. Außerdem wurde die Verwendung eines typischen clientseitigen Tools wie JConsole zum Verwalten der instrumentierten MBean erörtert.

Die Domäne der JMX-Technologie ist in Umfang und Reichweite sehr breit. Dieses Tutorial kann als Anfängerschritt in diese Richtung angesehen werden.

Der Quellcode dieses Tutorials befindet sich inover on Github.