JMX Java Management e Xtension API Cnam Paris

  • Slides: 72
Download presentation
JMX Java Management e. Xtension API Cnam Paris jean-michel Douin, douin au cnam point

JMX Java Management e. Xtension API Cnam Paris jean-michel Douin, douin au cnam point fr version 19 Février 2008 Architecture à base de composants ESIEE 1

Sommaire • Objectifs – Supervision de JVM • Une Première approche – Un exemple

Sommaire • Objectifs – Supervision de JVM • Une Première approche – Un exemple • • Un Manageable Bean (MBean) Un Agent Une supervision Une démonstration • De bien plus près : 3 niveaux – Instrumentation • Standard, dynamic, open, model Beans et MXBeans. – Agent / serveur • Installation et accès aux « MBeans » – Distribué • Connecteurs et adaptateurs ESIEE 2

Bibliographie utilisée • La présentation de Christophe Ebro – http: //rangiroa. essi. fr/cours/internet/02 -JMX-partie

Bibliographie utilisée • La présentation de Christophe Ebro – http: //rangiroa. essi. fr/cours/internet/02 -JMX-partie 2. pdf • L’indispensable tutoriel de Sun – http: //java. sun. com/docs/books/tutorial/jmx/index. html – http: //java. sun. com/javase/technologies/core/mntr-mgmt/javamanagement/ • Hello world – http: //java. sun. com/j 2 se/1. 5. 0/docs/guide/jmx/examples. html • Le blog de Daniel Fuchs – http: //blogs. sun. com/jmxetc/ • JMX et Design Patterns chez hp – http: //devresource. hp. com/drc/resources/jmxbestp_dp_pres/index. jsp • Côté développeur ibm – http: //www-128. ibm. com/developerworks/java/library/j-jmx 2/ Orienté MX 4 j, date un peu http: //admc. com/blaine/howtos/jmx/ http: //www. xmojo. org/products/xmojo/index. html Spécialisé MXBean / accès à la JVM – http: //www-128. ibm. com/developerworks/java/library/j-mxbeans/ Divers – http: //www-adele. imag. fr/users/Didier. Donsez/ujf/sujet/jmx. html ESIEE 3

Pré-requis • Notions de – Client/serveur, • Protocole JRMP( rmi) et HTTP – Introspection

Pré-requis • Notions de – Client/serveur, • Protocole JRMP( rmi) et HTTP – Introspection – Patrons Fabrique, Publish-Subscribe, Proxy ESIEE 4

JMX : Objectifs • Gestion/administration de Ressources – Matérielles comme logicielles • Configuration/déploiement –

JMX : Objectifs • Gestion/administration de Ressources – Matérielles comme logicielles • Configuration/déploiement – Statique et dynamique • Contrôle – Du Cycle de vie : start/stop/suspend/resume – De la Charge en vue d’une meilleure répartition • Supervision – Performance – Des erreurs/ exceptions – De l’état (cf. cycle de vie) ESIEE 5

JMX API • Hypothèse : tout est JAVA-JVM – Ressources matérielles – Ressources logicielles

JMX API • Hypothèse : tout est JAVA-JVM – Ressources matérielles – Ressources logicielles • Adoptée par de nombreuses entreprises – http: //java. sun. com/javase/technologies/core/mntr-mgmt/javamanagement/jmxadoption. jsp • Outils prédéfinis – jconsole, rmi/http/snmp/jini adapter ESIEE 6

Architecture • 3 niveaux – Instrumentation • Gestion de la ressource par un composant

Architecture • 3 niveaux – Instrumentation • Gestion de la ressource par un composant (MBean, Managed Bean) – Agents • Initialisation, installation et contrôle des MBean – Distribué/intégration • Adaptateurs de Protocoles • RMI/HTTP/SNMP-CMIP • Sécurité • Common Management Information Protocol (CMIP), protocole ISO • Simple Network Management Protocol (SNMP) ESIEE 7

Schéma de Christophe Ebro Sun • 3 niveaux Instrumentation, ESIEE serveur, distribué 8

Schéma de Christophe Ebro Sun • 3 niveaux Instrumentation, ESIEE serveur, distribué 8

Objectifs rappel contexte JVM • Accès à une JVM « de l’extérieur » –

Objectifs rappel contexte JVM • Accès à une JVM « de l’extérieur » – Une JVM en cours d’exécution … • Gestion d’objets Java déjà en place… MBean – Accès aux attributs • Lecture/écriture – Appels de méthodes • Passage de paramètres / retour de résultat – Notifications, installations d’observateurs • évènements • Ajout dynamique de nouveaux objets MBean – Code des classes en place spécialisé – Code « hors-place » à télécharger ESIEE 9

Par l’exemple : un capteur… • Sensor. MBean Instrumentation – Standard, dynamic, … •

Par l’exemple : un capteur… • Sensor. MBean Instrumentation – Standard, dynamic, … • Sensor. Agent Serveur • Outil jconsole Distribué ESIEE 10

Un exemple comme présentation • Sensor. MBean • Sensor. Agent Outil de Sun jconsole

Un exemple comme présentation • Sensor. MBean • Sensor. Agent Outil de Sun jconsole • Sensor. Client Instrumentation ESIEE Serveur Distribué 11

Instrumentation, Standard MBean // un capteur comme ressource public interface Sensor. MBean { //

Instrumentation, Standard MBean // un capteur comme ressource public interface Sensor. MBean { // getter/setter public int get. Value(); public void set. Value(int val); // operations public void reset(); } MBean suffixe imposé … ESIEE 12

Sensor implements Sensor. MBean public class Sensor implements Sensor. MBean{ private final int PERIOD;

Sensor implements Sensor. MBean public class Sensor implements Sensor. MBean{ private final int PERIOD; private int value; private Acquisition local; // un thread interne public Sensor(int period){ this. PERIOD = period; local = this. new Acquisition(); } public synchronized int get. Value(){ return value; } public synchronized void set. Value(int value){ this. value = value; } // operations public void reset(){… ESIEE Sensor préfixe imposé … 13

Agent • L’agent se charge de – L’Installation (instanciation) du MBean – L’Enregistrement auprès

Agent • L’agent se charge de – L’Installation (instanciation) du MBean – L’Enregistrement auprès du serveur de MBeans • MBean. Server • Un nom unique lui est attribué – en général par l’utilisateur, – selon une convention de nommage • Apparenté Properties exemple : Sensor. Agent: name=Sensor 1 » name la clé, Sensor 1 la valeur • Est installé sur la même JVM – D’autres peuvent le faire : un autre MBean, le serveur, de l’extérieur … ESIEE 14

Agent : Sensor. Agent public class Sensor. Agent{ private MBean. Server mbs; public Sensor.

Agent : Sensor. Agent public class Sensor. Agent{ private MBean. Server mbs; public Sensor. Agent(){ try{ mbs = Management. Factory. get. Platform. MBean. Server(); //* Object. Name name = new Object. Name("Sensor. Agent: name=Sensor 1"); Sensor mbean = new Sensor(2000); // création du mbean mbs. register. MBean(mbean, name); // enregistrement }catch(Exception e){ e. print. Stack. Trace(); } } public static void main(String[] args)throws Exception{ … new Sensor. Agent(); … Thread. sleep(Long. MAX_VALUE); * usage ici du patron fabrique … ESIEE 15

Client : Sensor. Client public class Sensor. Client{ // même JVM // Sensor. Agent

Client : Sensor. Client public class Sensor. Client{ // même JVM // Sensor. Agent a = new Sensor. Agent(); préalable MBean. Server mbs = …… // recherche du MBean Object. Name name = new Object. Name("Sensor. Agent: name=Sensor 1"); // accès à l’attribut, get. Value() System. out. println(mbs. get. Attribute(name, "Value")); … ESIEE 16

Distribué : jconsole • Accès à l’une des JVM, – munie par défaut de

Distribué : jconsole • Accès à l’une des JVM, – munie par défaut de son MBean. Server ESIEE 17

Distribué : jconsole • Onglet Threads – Sensor. Agent est bien endormi… ESIEE 18

Distribué : jconsole • Onglet Threads – Sensor. Agent est bien endormi… ESIEE 18

Distribué : jconsole • name=Sensor 1 – Accès aux attributs ESIEE 19

Distribué : jconsole • name=Sensor 1 – Accès aux attributs ESIEE 19

Distribué : jconsole • name=Sensor 1 – Opération reset() ESIEE 20

Distribué : jconsole • name=Sensor 1 – Opération reset() ESIEE 20

Résumé • Instrumentation MBean • Serveur Un Agent • Distribué jconsole • Réveil, alarmes,

Résumé • Instrumentation MBean • Serveur Un Agent • Distribué jconsole • Réveil, alarmes, pannes … – Ou bien Notifications, évènements asynchrones ? ESIEE 21

Réveil & notifications • À la suite d’un changement d’état – Patron publish/subscribe, mode

Réveil & notifications • À la suite d’un changement d’état – Patron publish/subscribe, mode pull ESIEE 22

Instrumentation & Notifications public class Sensor extends Notification. Broadcaster. Support implements Sensor. MBean{ public

Instrumentation & Notifications public class Sensor extends Notification. Broadcaster. Support implements Sensor. MBean{ public synchronized void set. Value(int value){ this. value = value; this. sequence. Number++; send. Notification( new Notification( "set. Value", // un nom this, sequence. Number, // un numéro System. current. Time. Millis(), // une estampille Integer. to. String(value))); // un message } ESIEE 23

Agent & notifications • L’agent est un ici observateur de « son » MBean

Agent & notifications • L’agent est un ici observateur de « son » MBean public class Sensor. Agent implements Notification. Listener{ private MBean. Server mbs; public Sensor. Agent(){ try{ … mbean. add. Notification. Listener(this, null); }catch(Exception e){ e. print. Stack. Trace(); } } public void handle. Notification( Notification notification, Object handback){ System. out. print(notification. get. Message()); System. out. println(" number : " + notification. get. Sequence. Number()); } ESIEE 24

Client : jconsole & notifications jconsole a souscrit ESIEE 25

Client : jconsole & notifications jconsole a souscrit ESIEE 25

Petite conclusion • À la mode des Bean-Java – Getter/setter, opérations – Standard MBean

Petite conclusion • À la mode des Bean-Java – Getter/setter, opérations – Standard MBean comme suffixe … Instrumentation – Enregistrement de ce MBean … Agent – Supervision jconsole • Simple ! • À suivre… ESIEE 26

Sommaire Maintenant d’un peu plus près ESIEE 27

Sommaire Maintenant d’un peu plus près ESIEE 27

Instrumentation MBeans 5 types • Standard : engendré depuis une interface xxx. MBean –

Instrumentation MBeans 5 types • Standard : engendré depuis une interface xxx. MBean – Voir l’exemple de présentation • Dynamic : n’importe quel objet, – fonctionnalités découvertes à l’exécution • Model : configurable, une template à instancier • Open : limité à un ensemble de type Java – Inhibe les téléchargements de code • MXBean 1. 6 : accès aux ressources de la JVM ESIEE 28

Dynamic. MBean • Par introspection … – c’est un mandataire String/JVM ESIEE 29

Dynamic. MBean • Par introspection … – c’est un mandataire String/JVM ESIEE 29

Dynamic • Accès de l’extérieur … – possible avec des noms d’attributs ou d’opérations

Dynamic • Accès de l’extérieur … – possible avec des noms d’attributs ou d’opérations – Il sera possible de les télécharger … ESIEE 30

Exemple du capteur public class Sensor. Dynamic extends Notification. Broadcaster. Support implements Dynamic. MBean

Exemple du capteur public class Sensor. Dynamic extends Notification. Broadcaster. Support implements Dynamic. MBean { public Sensor. Dynamic() { build. Dynamic. MBean. Info(); } public Object get. Attribute(String attribute. Name) throws Attribute. Not. Found. Exception, MBean. Exception, Reflection. Exception { if (attribute. Name. equals("Value")) { return get. Value(); } … Voir http: //java. sun. com/j 2 se/1. 5. 0/docs/guide/jmx/examples. html ESIEE 31

Dynamic. MBean • Proposer une « signature » du composant – get. MBean. Info()

Dynamic. MBean • Proposer une « signature » du composant – get. MBean. Info() retourne cette signature – Les méta-données MBean. Info décrivent les attributs, opérations et notifications • Utilisation ad’hoc – Un adaptateur d’objets Java existants afin de les rendre « compatibles MBean » ESIEE 32

Instrumentation MBeans 5 types • Standard : engendré depuis une interface xxx. MBean •

Instrumentation MBeans 5 types • Standard : engendré depuis une interface xxx. MBean • Dynamic : n’importe quel objet, – fonctionalités découvertes à l’exécution • Model : configurable, une template à instancier • Open : limité à un ensemble de type Java – Inhibe les téléchargements de code • MXBean 1. 6 : accès aux ressources de la JVM ESIEE 33

Instrumentation MBeans 5 types • Standard : engendré depuis une interface xxx. MBean •

Instrumentation MBeans 5 types • Standard : engendré depuis une interface xxx. MBean • Dynamic : n’importe quel objet, – fonctionalités découvertes à l’exécution • Model : configurable, une template à instancier • Open : limité à un ensemble de type Java – Inhibe les téléchargements de code • MXBean 1. 6 : accès aux ressources de la JVM ESIEE 34

Instrumentation MBeans 5 types • Standard : engendré depuis une interface xxx. MBean •

Instrumentation MBeans 5 types • Standard : engendré depuis une interface xxx. MBean • Dynamic : n’importe quel objet, – fonctionalités découvertes à l’exécution • Model : configurable, une template à instancier • Open : limité à un ensemble de type Java • MXBean : accès aux ressources de la JVM ESIEE 35

MXBean ESIEE • Compilation. MXBean • Garbage collection system • Memory. MXBean • Memory

MXBean ESIEE • Compilation. MXBean • Garbage collection system • Memory. MXBean • Memory managers Memory. Manager. MXBean • Threading Thread. MXBean • Operating system Operating. System. MXBean • Runtime system • Class loading system • Memory resources Garbage. Collector. MXBean Runtime. MXBean Class. Loading. MXBean 36

Un exemple : Thread. Agent, Thread. MXBean public class Thread. Agent{ private MBean. Server

Un exemple : Thread. Agent, Thread. MXBean public class Thread. Agent{ private MBean. Server mbs; public Thread. Agent(){ try{ Thread. MXBean mbean = Management. Factory. get. Thread. MXBean(); mbs = Management. Factory. get. Platform. MBean. Server(); Object. Name name = new Object. Name("Thread. Agent: name=thread 1"); mbs. register. MBean(mbean, name); }catch(Exception e){ e. print. Stack. Trace(); } } public static void main(String[] args)throws Exception{ … new Thread. Agent(); … Thread. sleep(Long. MAX_VALUE); ESIEE 37

Distribué : jconsole ESIEE 38

Distribué : jconsole ESIEE 38

Sommaire Agents. . ESIEE 39

Sommaire Agents. . ESIEE 39

Agents • Adpatateurs et connecteurs • MBean server • Interrogation et listage • Chargement

Agents • Adpatateurs et connecteurs • MBean server • Interrogation et listage • Chargement dynamique • Agent services ESIEE 40

Distribué, Connector, Adapter • Un connector – – Est un MBean, Est enregistré auprès

Distribué, Connector, Adapter • Un connector – – Est un MBean, Est enregistré auprès du “MBean server”, Communique avec une machine (paire) Exemple • Un rmi connecteur • Un adapter – – Est un MBean , Est enregistré auprès du “MBean server”, Ecoute sur un port et respecte un certain protocole. Exemple • Un adapter HTML accepte des requêtes au protocole HTTP • Un client type est un navigateur ESIEE 41

Les connecteurs • RMI • TCP dédié ESIEE 42

Les connecteurs • RMI • TCP dédié ESIEE 42

Rmi connecteur, Sensor. Agent try { MBean. Server mbs …. name = new Object.

Rmi connecteur, Sensor. Agent try { MBean. Server mbs …. name = new Object. Name("Sensor. Agent: name=Sensor 2"); mbs. register. MBean(sensor. Bean, name); // Creation et démarrage du connecteur JMXService. URL url = new JMXService. URL("service: jmx: rmi: ///jndi/rmi: //localhost: 9999/server") ; JMXConnector. Server cs = JMXConnector. Server. Factory. new. JMXConnector. Server(url, null, mbs); cs. start(); } catch(Exception e) { } ESIEE 43

Rmi + jconsole • start rmiregistry 9999 – Côté MBean. Server ESIEE 44

Rmi + jconsole • start rmiregistry 9999 – Côté MBean. Server ESIEE 44

Rmi. Client public class RMIClient{ public static void main(String[] args) throws Exception{ // à

Rmi. Client public class RMIClient{ public static void main(String[] args) throws Exception{ // à la recherche du connecteur, via l’annuaire JMXService. URL url = new JMXService. URL("service: jmx: rmi: ///jndi/rmi: //localhost : 9999/server"); JMXConnector cs = JMXConnector. Factory. connect(url); MBean. Server. Connection mbs = cs. get. MBean. Server. Connection(); Object. Name name = new Object. Name("Sensor. Agent: name=Sensor 2"); System. out. println(" value : " + mbs. get. Attribute(name, "Value")); } } ESIEE 45

Notification, déjà vue public void add. Notification. Listener(Object. Name name, Notification. Listener listener, Notification.

Notification, déjà vue public void add. Notification. Listener(Object. Name name, Notification. Listener listener, Notification. Filter filter, Object handback) public void add. Notification. Listener(Object. Name name, Object. Name listener, Notification. Filter filter, Object handback) public void remove. Notification. Listener(Object. Name name, Notification. Listener listener) public void remove. Notification. Listener(Object. Name name, Object. Name listener) ESIEE 46

Les adaptateurs • Navigateur html adaptateur ESIEE 47

Les adaptateurs • Navigateur html adaptateur ESIEE 47

Html adaptateur, Sensor. Agent try { MBean. Server mbs …. name = new Object.

Html adaptateur, Sensor. Agent try { MBean. Server mbs …. name = new Object. Name("Sensor. Agent: name=Sensor 2"); mbs. register. MBean(sensor. Bean, name); // Creation et démarrage de l’adaptateur Html. Adaptor. Server adapter = new Html. Adaptor. Server(); //* adapter. set. Port(8088); name = new Object. Name("Html. Adaptor. Server: name=html, port=8088"); mbs. register. MBean(adapter, name); adapter. start(); * import com. sun. jdmk. comm. *; // 5. 0. 1 ESIEE 48

Le Client est un navigateur ESIEE 49

Le Client est un navigateur ESIEE 49

Client, navigateur • Sans oublier, jdmkrt. jar dans le classpath – Bluej voir le

Client, navigateur • Sans oublier, jdmkrt. jar dans le classpath – Bluej voir le répertoire lib/userlib/ – java -cp. ; . . /JMX/jdmkrt. jar Thread. Agent ESIEE 50

A la recherche du MBean ? • MBean en connaisssant son nom : ok

A la recherche du MBean ? • MBean en connaisssant son nom : ok • Tous les MBean d’un certain type ? • Tous les MBean dont l’attribut « Counter » == 10 • Tous les MBean dont l’attribut « Counter » >= 10 et dont l’estampille < X • « QL » pour les Mbean ? MQL ? – Query. Exp – Expression booléenne ESIEE 51

Query. Exp, comme un composite… Query. Exp exp = Query. gt(Query. attr("count"), Query. value(10))

Query. Exp, comme un composite… Query. Exp exp = Query. gt(Query. attr("count"), Query. value(10)) Query. Exp prob 1 = Query. eq(Query. attr("ink. Level"), Query. value("LOW")); Query. Exp prob 2 = Query. lt(Query. attr("paper. Count"), Query. value(50)); Query. Exp exp = Query. or(prob 1, prob 2); • "(ink. Level = LOW) or (paper. Count < 50)" ESIEE 52

Chargement dynamique de MBean • Agent M-Let • Description XML ESIEE 53

Chargement dynamique de MBean • Agent M-Let • Description XML ESIEE 53

M-Let • Comment – M-Let agent ESIEE 54

M-Let • Comment – M-Let agent ESIEE 54

Chargement dynamique de MBean • M-Let – « URLClass. Loader » Associé à un

Chargement dynamique de MBean • M-Let – « URLClass. Loader » Associé à un descripteur en XML <MLET CODE=Sensor ARCHIVE=sensor. jar CODEBASE=http: //jfod. cnam. fr/NSY 102/jmx/ NAME=Sensor: name=Sensor 1> </MLET> • Descripteur XML, nommé sensor. mlet, à cette URL http: //jfod. cnam. fr/NSY 102/jmx/sensor. mlet ESIEE 55

Mlet en séquence ESIEE 56

Mlet en séquence ESIEE 56

Agent M-let public MLet. Agent(){ try{ mbs = Management. Factory. get. Platform. MBean. Server();

Agent M-let public MLet. Agent(){ try{ mbs = Management. Factory. get. Platform. MBean. Server(); Object. Name name = new Object. Name("Services: name=mlet"); mbs. create. MBean("javax. management. loading. MLet", name); JMXService. URL url = new JMXService. URL("service: jmx: rmi: ///jndi/rmi: //localhost: 9999/server"); JMXConnector. Server cs = JMXConnector. Server. Factory. new. JMXConnector. Server(url, null, mbs); cs. start(); }catch(Exception e){ e. print. Stack. Trace(); } } ESIEE 57

Agent M-Let Sensor À la volée! • Téléchargement dynamique du MBean Sensor – Appel

Agent M-Let Sensor À la volée! • Téléchargement dynamique du MBean Sensor – Appel de get. MBeans. From. URL("http: //jfod. cnam. fr/NSY 102/jmx/sensor. mlet") ESIEE 58

MLet. Bean public interface MLet. MBean { public Set get. MBeans. From. URL(String url)

MLet. Bean public interface MLet. MBean { public Set get. MBeans. From. URL(String url) throws Service. Not. Found. Exception; public Set get. MBeans. From. URL(URL url) throws Service. Not. Found. Exception; public void add. URL(URL url); public void add. URL(String url) throws Service. Not. Found. Exception; public URL[] get. URLs(); public URL get. Resource(String name); public Input. Stream get. Resource. As. Stream(String name); public Enumeration get. Resources(String name) throws IOException; public String get. Library. Directory(); public void set. Library. Directory(String libdir); } ESIEE 59

M-Let File <MLET CODE="class. Name" | OBJECT="serialized. Object. File. Name" ARCHIVE="class. Or. Jar. File.

M-Let File <MLET CODE="class. Name" | OBJECT="serialized. Object. File. Name" ARCHIVE="class. Or. Jar. File. Name" [CODEBASE="relative. Path. To. Archive"] [NAME="mbean. Object. Name"] [VERSION="version"] > [<ARG TYPE="type" VALUE="value">] </MLET> • [<ARG TYPE="type" VALUE="value">] – Adaptés au constructeurs avec paramètres – Exemple <ARG TYPE=int VALUE=3000> ESIEE 60

retrait dynamique de MBean • mbs = Management. Factory. get. Platform. MBean. Server(); •

retrait dynamique de MBean • mbs = Management. Factory. get. Platform. MBean. Server(); • Object. Name name=… • mbs. unregister(name) ESIEE 61

Sommaire ESIEE 62

Sommaire ESIEE 62

Interrogations au sujet des MBeans • MBean. Info meta-data: mbs. get. MBean. Info(obj. Name);

Interrogations au sujet des MBeans • MBean. Info meta-data: mbs. get. MBean. Info(obj. Name); – Dynamic comme Standard MBeans • And you can also run a type-check: mbs. is. Instance. Of(obj. Name, class. Name) ESIEE 63

Exemplee : JMX-JBoss • ESIEE http: //www. openknowledge. de/pdf/jax 2003/JMX_2003_05_10. pdf 64

Exemplee : JMX-JBoss • ESIEE http: //www. openknowledge. de/pdf/jax 2003/JMX_2003_05_10. pdf 64

Conclusion ESIEE 65

Conclusion ESIEE 65

MBean Cycle de vie • Extrait de ce livre, – chapitre 9 : Designing

MBean Cycle de vie • Extrait de ce livre, – chapitre 9 : Designing with JMX • Paragraphe 3 MBean Registration and Lifecycle ESIEE 66

Création locale et enregistrement ESIEE 67

Création locale et enregistrement ESIEE 67

Création du MBean et enregistrement ESIEE 68

Création du MBean et enregistrement ESIEE 68

Création depuis une application externe ESIEE 69

Création depuis une application externe ESIEE 69

Création par un adaptateur ESIEE 70

Création par un adaptateur ESIEE 70

Création au démarrage ESIEE 71

Création au démarrage ESIEE 71

M-let et notifications • Être prévenu d’un téléchargement • Voir l’adaptateur livre page 241

M-let et notifications • Être prévenu d’un téléchargement • Voir l’adaptateur livre page 241 ESIEE 72