Noyau du serveur
Afin de permettre un développement modulaire, JBoss est composé de services qui s’ajoutent à un noyau, comme des plugins. Cette modularité est basée sur la spécification JMX (Java Management eXtension). Après une présentation de la spécification JMX, nous verrons comment celleci est implémentée sous JBoss, et comment nous pouvons gérer les services JBoss et ajouter nos propres services.
Présentation de la spécification JMX
La spécification JMX fournit un standard pour gérer et superviser des ressources matérielles et logicielles, y compris la machine virtuelle. Cette spécification fait partie de la plateforme standard (JSE) depuis la version 5. L’instrumentation des ressources s’effectue au moyen de composants spécifiques appelés MBean (Managed Bean). L’architecture JMX comporte 3 niveaux : ● un niveau « Instrumentation » avec les MBeans, où le MBean peut être perçu comme une « sonde » permettant de gérer une ressource. Le MBean instrumentalise la ressource à superviser ; ● un niveau « Agent » avec le conteneur de MBeans (ou serveur de MBeans) qui gère les MBeans et peut exécuter des opérations sur ces MBeans ; ● un niveau « Distribution » constitué des mécanismes de communication entre les applications de supervision et le niveau « Agent ». La plateforme Java inclut une console de supervision des MBeans : jconsole qui se trouve dans le sousrépertoire bin du répertoire d’installation du JDK. Le MBean doit suivre un modèle de conception qui consiste à avoir : ● des attributs en lecture et ou écriture ; ● des opérations ; ● une description. La spécification définit 5 types de MBeans : standard, dynamique, ouvert, modèle et MXBean. Nous ne présenterons ici que le MBean standard, l’objectif étant de comprendre la prise en compte et la gestion des services par JBoss. Un MBean standard est composé : ● d’une interface nommée QuelqueChoseMBean : ● les attributs sont exposés par des getters/setters. ● les opérations sont des méthodes publiques. ● d’une classe nommée QuelqueChose qui implémente l’interface QuelqueChoseMBean. Les exemples suivants sont extraits du package fr.editions.eni.jboss.mbeans du projet « Chap 3 MBean » de l’archive téléchargée. Cet exemple est trivial mais utile pour illustrer les mécanismes de base de JMX. a. La couche instrumentation : l’interface HelloMBean Elle possède : ● deux attributs : Name en lecture seule, et Couleur en lecture et écriture. ● deux opérations sayHello() et additionner(…). enidentnumber package fr.editions.eni.jboss.mbeans; public interface HelloMBean { // attributs public String getName(); public void setCouleur(String couleur); public String getCouleur(); // opérations public void sayHello(); public double additionner(double a, double b); } b. La couche instrumentation : implémentation du MBean Cette implémentation est triviale et n’appelle pas de commentaires. package fr.editions.eni.jboss.mbeans; public class Hello implements HelloMBean { private String couleur = « vert »; private String name = « ENI »; public double additionner(double a, double b) { return a+b; } public String getCouleur() { return couleur; } public String getName() { return name; } public void sayHello() { System.out.println(« Bonjour tout le monde »);} public void setCouleur(String couleur) { this.couleur = couleur; } }
La couche Agent
JSE fournit un conteneur de MBean que nous pouvons utiliser pour y enregistrer notre MBean. public class AgentHelloMBean { public static void main(String[] args) throws Exception { // Récupération d’un MBean Serveur MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); // Tout MBean doit être associé à un ObjectName ObjectName on = new ObjectName(« fr.editions.eni.jboss.mbeans:type=Hello »); // Instansiation de Hello, puis enregistrement dans le serveur Hello hello = new Hello(); mbs.registerMBean(hello, on); // Attente System.out.println(« Serveur démarré… »); Thread.sleep(Long.MAX_VALUE); }
La couche distribuée : jconsole
■ Pour tester cet exemple, exécutez la classe AgentHelloMBean. Puis, démarrez jconsole, qui est un exécutable qui se trouve dans le répertoire bin de votre JDK (avec java, javac…). Nous utilisons ici le JSE 6. Si l’agent est bien démarré, vous devez le voir apparaître dans la fenêtre de connexion. ■ Sélectionnez fr.editions.eni.jboss.mbeans.AgentHelloMBean et cliquez sur le bouton Connect. Puis sélectionnez l’onglet MBeans. Vous retrouvez les deux attributs Couleur et Name, notez que ces attributs commencent par une majuscule. Vous pouvez changer la valeur de Couleur, mais pas celle de Name. En sélectionnant l’opération additionner, vous pouvez entrer les paramètres p1 et p2, puis cliquer sur le bouton additionner. Le résultat apparaît dans une fenêtre popup. Pour l’opération sayHello, le résultat apparaît dans la fenêtre d’exécution de la classe AgentHelloMBean.