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:
-
Instrumentation layer: MBeans, die beim JMX-Agenten registriert sind, über den Ressourcen verwaltet werden
-
JMX agent layer:ist die Kernkomponente (MbeanServer), die die Registrierung verwalteter MBeans verwaltet und eine Schnittstelle für den Zugriff auf diese bereitstellt
-
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
-
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
-
Klicken Sie nach dem Herstellen der Verbindung auf die Registerkarte MBeans oben rechts im Bereich Ansicht
-
Die Liste der registrierten MBeans wird in der linken Spalte angezeigt
-
Klicken Sie auf com.example.tutorial → basic → game
-
Unter Spiel gibt es zwei Reihen, 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 ü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.