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:
- Instrumentierungsschicht: MBeans, die beim JMX-Agenten registriert sind, über den Ressourcen verwaltet werden
- JMX-Agentenschicht: Die Kernkomponente (MbeanServer), die die Registrierung verwalteter MBeans verwaltet und eine Schnittstelle für den Zugriff auf diese bereitstellt
- 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
- Starten Sie die Anwendung in der Eclipse
- Starten Sie Jconsole (im Ordner bin des JDK-Installationsverzeichnisses Ihres Computers)
- 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
- Nachdem die Verbindung hergestellt wurde, klicken Sie oben rechts im Bereich Ansicht auf die Registerkarte MBeans
- Die Liste der registrierten MBeans wird in der linken Spalte angezeigt
- Klicken Sie auf com.baeldung.tutorial -> basic -> game
- 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.