Introduction de base à JMX

Introduction de base à JMX

1. introduction

LeJava Management Extensions (JMX) framework a été introduit dans Java 1.5 et a trouvé une large acceptation dans la communauté des développeurs Java depuis sa création.

Il fournit une infrastructure facilement configurable, évolutive, fiable et plus ou moins conviviale pour gérer les applications Java localement ou à distance. Le cadre introduit le concept de MBeans pour la gestion en temps réel des applications.

Cet article est un guide étape par étape pour les débutants pour créer et configurer un MBean de base et le gérer via JConsole.

2. Architecture JMX

L'architecture JMX suit une approche en trois couches:

  1. Instrumentation layer: MBeans enregistrés auprès de l'agent JMX via lesquels les ressources sont gérées

  2. JMX agent layer: le composant principal (MbeanServer) qui maintient le registre des MBeans gérés et fournit une interface pour y accéder

  3. Remote management layer: généralement un outil côté client comme JConsole

3. Créer une classe MBean

Lors de la création de MBeans, il existe un modèle de conception particulier auquel nous devons nous conformer. La classe MBean modèle DOIT implémenter une interface avec le nom suivant:*“model class name” plus MBean*.

Définissons donc notre interface MBean et la classe qui l'implémente:

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

La classeGame remplace une méthodeplayFootball() de l'interface parent. En dehors de cela, la classe a une variable membreplayerName et un getter / setter pour cela.

Notez que getter / setter sont également déclarés dans l'interface parent.

4. Instrumentation avec l'agent JMX

Les agents JMX sont les entités s'exécutant localement ou à distance qui fournissent un accès de gestion aux MBeans enregistrés avec eux.

UtilisonsPlatformMbeanServer - le composant principal de l’agent JMX et enregistrons le MBeanGame avec lui.

Nous allons utiliser une autre entité -ObjectName - pour enregistrer l'instance de classeGame avec lesPlatformMbeanServer; il s'agit d'une chaîne composée de deux parties:

  • domain: peut être une chaîne arbitraire, mais selon les conventions de dénomination MBean, il doit avoir le nom de package Java (évite les conflits de dénomination)

  • key: une liste de paires «key=value» séparées par une virgule

Dans cet exemple, voici nosObjectName:“com.baledung.tutorial:type=basic,name=game”. __

Nous obtiendrons lesMBeanServer de la classe d'usinejava.lang.management.ManagementFactory:

MBeanServer server = ManagementFactory.getPlatformMBeanServer();

Et nous allons enregistrer la classe MBean modèle en utilisant sesObjectName personnalisés:

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

Enfin, juste pour pouvoir le tester, nous allons ajouter une bouclewhile pour empêcher l'application de se terminer avant que nous puissions accéder au MBean via JConsole:

while (true) {
}

5. Accéder au MBean

5.1. Connexion du côté client

  1. Lancer l'application dans l'Eclipse

  2. Démarrez Jconsole (situé dans le dossier bin du répertoire d’installation JDK de votre machine).

  3. Connexion → nouvelle connexion → sélectionnez le processus Java local de ce didacticiel → Connexion → Avertissement de connexion SSl non sécurisée → Continuer avec une connexion non sécurisée

  4. Une fois la connexion établie, cliquez sur l'onglet MBeans en haut à droite du volet Afficher.

  5. La liste des MBeans enregistrés apparaîtra dans la colonne de gauche

  6. Cliquez sur com.example.tutorial → basique → jeu

  7. Sous le jeu, il y aura deux lignes, une pour les attributs et les opérations

Voici un aperçu de la partie JConsole du processus:

image

5.2. Gérer le MBean

Les bases de la gestion MBean sont simples:

  • Les attributs peuvent lire ou écrire

  • Des méthodes peuvent être appelées et des arguments peuvent leur être fournis ou des valeurs renvoyées par celles-ci

Voyons ce que cela signifie pour le MBeanGame en pratique:

  • attribute: saisissez une nouvelle valeur pour l'attributplayerName - par exemple «Messi» et cliquez surRefresh button

Le journal suivant apparaîtra dans la console Eclipse:

Définissez playerName sur la valeur Messi

  • operations: saisissez une valeur pour l'argument String de la méthodeplayFootBall() - par exemple «Barcelona» et cliquez sur le bouton méthode. Unwindow alert for successful invocation apparaîtra

Le journal suivant apparaîtra dans la console eclipse:

Messi joue au football pour Barcelone

6. Conclusion

Ce tutoriel a abordé les bases de la configuration d’une application compatible JMX à l’aide de MBeans. En outre, il a été question de l’utilisation d’un outil client typique, tel que JConsole, pour gérer le MBean instrumenté.

Le domaine de la technologie JMX est très vaste et étendu. Ce didacticiel peut être considéré comme une étape débutante dans ce sens.

Le code source de ce tutoriel peut être trouvéover on Github.