Introduction de base à JMX

1. Introduction

Le framework Java Management Extensions (JMX) 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 en local ou à distance. Le framework 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 à trois niveaux:

  1. Couche d'instrumentation: MBeans enregistrés auprès de l'agent JMX via lequel les ressources sont gérées
  2. Couche d'agent JMX: le composant principal (MbeanServer) qui maintient le registre des MBeans gérés et fournit une interface pour y accéder
  3. Couche de gestion à distance: généralement un outil côté client comme JConsole

3. Création d'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: «nom de classe modèle» 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 classe Game remplace une méthode playFootball () de l'interface parent. En dehors de cela, la classe a une variable membre playerName 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 l'accès de gestion aux MBeans enregistrés avec eux.

Utilisons PlatformMbeanServer - le composant principal de l'agent JMX et enregistrons le Game MBean avec lui.

Nous utiliserons une autre entité - ObjectNam e - pour enregistrer l' instance de la classe Game avec PlatformMbeanServer ; 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 un nom de package Java (évite les conflits de dénomination)
  • clé: une liste de paires « clé = valeur » séparées par une virgule

Dans cet exemple, nous utiliserons: «com.baledung.tutorial: type = basic, name = game».

Nous obtiendrons le MBeanServer de la classe d'usine java.lang.management.ManagementFactory.

Ensuite, nous enregistrerons le modèle MBean en utilisant le ObjectName créé :

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 }

Enfin, juste pour être en mesure de le tester - nous allons ajouter un en boucle pour empêcher l'application de terminer avant de pouvoir accéder aux MBean par JConsole:

while (true) { }

5. Accès au MBean

5.1. Connexion du côté client

  1. Démarrez 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 Affichage
  5. La liste des MBeans enregistrés apparaîtra dans la colonne de gauche
  6. Cliquez sur com.baeldung.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:

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 invoquées et des arguments peuvent leur être fournis ou des valeurs renvoyées par elles

Voyons ce que cela signifie pour le Game MBean en pratique:

  • attribut : saisissez une nouvelle valeur pour l'attribut playerName - par exemple "Messi" et cliquez sur le bouton Actualiser

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éthode playFootBall () - par exemple «Barcelona» et cliquez sur le bouton méthode. Une fenêtre d'alerte pour l'invocation réussie apparaîtra

Le journal suivant apparaîtra dans la console eclipse:

Messi joue au football pour Barcelone

6. Conclusion

Ce didacticiel a abordé les bases de la configuration d'une application compatible JMX à l'aide de MBeans. En outre, il a discuté de l'utilisation d'un outil côté client typique comme JConsole pour gérer le MBean instrumenté.

Le domaine de la technologie JMX a une portée et une portée très larges. Ce didacticiel peut être considéré comme une étape du débutant vers cela.

Le code source de ce tutoriel se trouve à l'adresse over sur Github.