Grundlegende Einführung in JMX

1. Einleitung

Das Java 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 der 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 verfolgt einen dreischichtigen Ansatz:

  1. Instrumentierungsschicht: MBeans, die beim JMX-Agenten registriert sind, über den Ressourcen verwaltet werden
  2. JMX-Agentenschicht: Die Kernkomponente (MbeanServer), die die Registrierung verwalteter MBeans verwaltet und eine Schnittstelle für den Zugriff auf diese bereitstellt
  3. Remoteverwaltungsschicht : Normalerweise clientseitiges Tool wie JConsole

3. Erstellen einer MBean-Klasse

Beim Erstellen von MBeans gibt es ein bestimmtes Entwurfsmuster, dem wir entsprechen müssen. Die Modell-MBean-Klasse MUSS eine Schnittstelle mit dem folgenden Namen implementieren: "Modellklassenname" 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 Game- Klasse überschreibt eine Methode playFootball () der übergeordneten Oberfläche. Abgesehen davon hat die Klasse eine Mitgliedsvariable playerName und einen Getter / Setter dafür.

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

4. Instrumentierung mit dem JMX-Agenten

JMX-Agenten sind die Entitäten, die entweder lokal oder remote ausgeführt werden und den Verwaltungszugriff auf die bei ihnen registrierten MBeans gewähren.

Verwenden wir PlatformMbeanServer - die Kernkomponente des JMX-Agenten - und registrieren Sie die Game- MBean.

Wir werden eine andere Entität - ObjectNam e - verwenden, um die Game- Klasseninstanz beim PlatformMbeanServer zu 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).
  • Schlüssel: Eine Liste von " Schlüssel = Wert " -Paaren, die durch ein Komma getrennt sind

In diesem Beispiel verwenden wir: "com.baledung.tutorial: type = basic, name = game".

Wir erhalten den MBeanServer von der Factory-Klasse java.lang.management.ManagementFactory.

Dann registrieren wir die Modell-MBean unter Verwendung des erstellten Objektnamens:

try { ObjectName objectName = new ObjectName("com.baeldung.tutorial:type=basic,name=game"); MBeanServer server = ManagementFactory.getPlatformMBeanServer(); server.registerMBean(new Game(), objectName); } catch (MalformedObjectNameException | InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException e) { // handle exceptions }

Um es zu testen, fügen wir eine while- 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 Clientseite

  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. Nachdem die Verbindung hergestellt wurde, klicken Sie oben rechts im Bereich Ansicht auf die Registerkarte MBeans
  5. Die Liste der registrierten MBeans wird in der linken Spalte angezeigt
  6. Klicken Sie auf com.baeldung.tutorial -> basic -> game
  7. Im Spiel gibt es zwei Zeilen, jeweils eine für Attribute und Operationen

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

5.2. MBean verwalten

Die Grundlagen der MBean-Verwaltung sind einfach:

  • Attribute können gelesen oder geschrieben werden
  • Methoden können aufgerufen und Argumente angegeben oder Werte von ihnen zurückgegeben werden

Mal sehen, was das für die Game MBean in der Praxis bedeutet:

  • Attribut : Geben Sie einen neuen Wert für das Attribut Spielername ein, z. B. "Messi", und klicken Sie auf die Schaltfläche " Aktualisieren "

Das folgende Protokoll wird in der Eclipse-Konsole angezeigt:

Setze playerName auf Messi

  • Operationen : Geben Sie einen Wert für das String-Argument der Methode playFootBall () ein, z. B. "Barcelona", und klicken Sie auf die Methodenschaltfläche. Eine Fensterwarnung für einen erfolgreichen Aufruf wird angezeigt

Das folgende Protokoll wird in der Eclipse-Konsole angezeigt:

Messi spielt Fußball für Barcelona

6. Fazit

In diesem Lernprogramm 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 zur Verwaltung 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.

Den Quellcode dieses Tutorials finden Sie auf Github.