116
NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin au cnam point fr version 08 Avril 2011

NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

Embed Size (px)

Citation preview

Page 1: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY1021

NSY102Conception de logiciels Intranet

JMXJava Management eXtension API

Architecture à base de composants

Cnam Parisjean-michel Douin, douin au cnam point fr

version 08 Avril 2011

Page 2: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY1022

Sommaire

• Objectifs– Supervision d’une JVM, locale ou distante

• Lecture/écriture/mise à jour/téléchargement/…

• Une Première approche– Un exemple simple

• Un Managed Bean (MBean) • Un agent• Une supervision comme démonstration

• De 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

– Applette et JMX, Plug-in et JMX

Page 3: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY1023

Bibliographie utilisée

• La présentation de Christophe Ebro– http://rangiroa.essi.fr/cours/internet/02-JMX-partie2.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/j2se/1.5.0/docs/guide/jmx/examples.html

• Le blog de Daniel Fuchs et celui de Luis-Miguel Alventosa – http://blogs.sun.com/jmxetc/ http://blogs.sun.com/lmalventosa/

• 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-jmx2/

• JMX in Action, ed. Manning– Benjamin G.Sullins et Mark B. Whipple http://java.sun.com/developer/Books/javaprogramming/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

Page 4: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY1024

Pré-requis

• Notions de

– Introspection• En tant qu’utilisateur

– Client/serveur, • Protocole JRMP( rmi) et HTTP

– Patrons Factory, Publish-Subscribe, DynamicProxy

Page 5: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY1025

JMX : Objectifs

• Supervision de JVM locales ou distantes– En cours d’exécution

• Gestion/administration de Ressources– Matérielles comme logicielles

• Configuration/déploiement/mise à jour– 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)

Page 6: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY1026

Supervision : mouture fine…

• Détection de la mémoire utilisée• Déclenchement du ramasse-miettes, ou bien son arrêt• Chargement de classe en mode verbose• Détection d’un interblocage• Accès aux ressources de l’OS• Gestion d’application de type MBean• Gestion de serveurs • Gestion d’applettes !

– Au sein d’un navigateur …

• …

Page 7: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY1027

JMX API

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

• Depuis J2SE 1.5, mais 1.6 sera préféré, et JMX >= 1.4

• Adoptée par de nombreuses entreprises– http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/jmxadoption.jsp– Déjà présent au sein de plate-formes commerciales … JBoss, Apache, GlassFish,

• Outils prédéfinis– jconsole, jvisualvm(1.6 update11), interface vers rmi/http/snmp/jini …– JDMK en open source

• Java Dynamic Management Kit http://java.sun.com/products/jdmk/

Page 8: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY1028

Architecture

• 3 niveaux

– Instrumentation• Gestion de la ressource par un composant (MBean, Managed Bean)

– Agents• Initialisation, installation au sein du serveur de 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)

Page 9: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY1029

Schéma de Christophe Ebro de Sun

• 3 niveaux instrumentation, serveur, distribué

JVM

JVM

Page 10: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10210

Objectifs rappel contexte JVM

• Accès à une JVM « de l’extérieur »– Supervision d’une JVM en cours d’exécution …

• Gestion d’objets Java déjà en place… MBean– Accès aux attributs (introspection)

• Lecture/écriture– Appels de méthodes (introspection)

• Passage de paramètres / retour de résultat– Notifications, (publish-subscribe)

• évènements

• Ajout dynamique de nouveaux objets MBean– Code des classes en place

spécialisé– Code « hors-place » à télécharger

• Retrait dynamique d’objets MBean

• Un premier exemple …

Page 11: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10211

Par l’exemple : un capteur…

• SensorMBeanInstrumentation

– Un capteur / une mesure

• SensorAgentServeur

– Installation du service

• Outil jconsoleDistribué

– Un client en standard (j2SE)

Page 12: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10212

Un exemple en introduction

• SensorMBean• Sensor

Instrumentation

• SensorAgent

Serveur

Outil de Sun jconsole

Distribué

Page 13: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10213

Les classes en présence

• SensorMBean.java – Une interface, les méthodes proposées

• Sensor.java– Une implémentation de l’interface

• SensorAgent– Inscription auprès du serveur de MBean (prédéfini)– Les méthodes deviennent des services, accesibles via le

serveur de MBean

• jconsole – Une application prédéfinie

SensorMBean

Sensor

SensorAgent Outil de Sun jconsole

Instrumentation

Distribué

Serveur

Page 14: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10214

Instrumentation, Standard MBean

public interface SensorMBean {

// getter/setter public int getValue(); public void setValue(int val); // operations public void reset(); }

MBean suffixe imposé … syntaxe à respecter

Page 15: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10215

Remarques de l’introspecteur …

getter/setter selon Sun, une convention d’écriture public int getValue();

public void setValue(int val);

Un outil peut donc en déduire qu’il existe un attributint value;

accessible en lecture et en écriture

Page 16: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10216

Sensor implements SensorMBean

public class Sensor implements SensorMBean{

private final int PERIOD; private int value;// Acquisition est une classe interne// une simulation du capteur, page suivante private Acquisition local; public Sensor(int period){ this.PERIOD = period; local = this.new Acquisition(); } public synchronized int getValue(){ return value; } public synchronized void setValue(int value){ this.value = value; } public void reset(){… page suivante

Classe Sensor imposée …

Page 17: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10217

Sensor suite

public void reset(){ local.interrupt(); try{local.join();}catch(InterruptedException ie){} System.out.println("reset ...."); local = this.new Acquisition(); }

• private class Acquisition extends Thread implements java.io.Serializable{

• private Random random= new Random();• public Acquisition(){• random= new Random(); start();• }• public void run(){• int valeur = 0;• try{• while(!isInterrupted()){• Thread.sleep(PERIOD/2);• int value = random.nextInt(100);• Thread.sleep(PERIOD/2);• System.out.println("." + value);} // cf page suivante• }catch(InterruptedException ie){}• }• }

Page 18: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10218

Démonstration

• SensorMBean s = new Sensor(2000);

Une « mesure » toutes les deux secondes

Page 19: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10219

Agent ou impresario

• L’agent du bean se charge de– L’installation (instanciation) du MBean

– L’enregistrement auprès du serveur de MBeans• MBeanServer

• Un nom unique lui est attribué – en général par l’utilisateur, – selon une convention de nommage

• Apparenté Properties exemple : SensorAgent:name=Sensor1

» name la clé, Sensor1 la valeur

• Cet agent est ici installé sur la même JVM– D’autres peuvent le faire : un autre MBean, le serveur, de l’extérieur …

Page 20: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10220

Agent : SensorAgent

public class SensorAgent{ private MBeanServer mbs; public SensorAgent(){ try{

mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName name = new ObjectName("SensorAgent:name=Sensor1"); Sensor mbean = new Sensor(2000); // création du mbean mbs.registerMBean(mbean, name); // enregistrement

}catch(Exception e){ …} }

public static void main(String[] args)throws Exception{ SensorAgent agent = new SensorAgent();

Page 21: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10221

Commentaires sur l’agent

mbs = ManagementFactory.getPlatformMBeanServer();

Le gestionnaire de MBean prédéfini

ObjectName name = new ObjectName("SensorAgent:name=Sensor1");

Un nom, éventuellement suivi de propriétés

SensorMBean mbean = new Sensor(2000);

Création du mbean, même JVM

mbs.registerMBean(mbean, name);

Enregistrement auprès du gestionnaire

Page 22: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10222

Supervisions prédéfinies

• Outils– jconsole– jvisualVM– jps

Page 23: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10223

Distribué : jconsole

• Accès à l’une des JVM, – Déjà équipée de son MBeanServer*

SensorAgent(ici numérotation PID « windows »)

Les PID des JVM :console> jps

* Plusieurs MBeanServer Peuvent co-exister

Page 24: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10224

Distribué : jconsole

• name=Sensor1– Accès aux attributs

• getter/setter, par introspection

Page 25: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10225

Distribué : jconsole

• name=Sensor1– opération reset()

Page 26: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10226

Distribué : jconsole

• Onglet Threads, un MXBean abordé par la suite

– SensorAgent est bien endormi…

Page 27: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10227

Java VisualVM

• jvisualVM –https://visualvm.dev.java.net/download.html

•https://visualvm.dev.java.net/docindex.html

– jconsole global

Page 28: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10228

jvisualVM, puissant …

Page 29: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10229

jvisualVM, à essayer

Page 30: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10230

Résumé, Pause …

• MBean – Un composant

• Agent– Chargé du dialogue avec l’infrastructure(canevas/framework)

• Jconsole, jvisualvm deux outils prédéfinis

– Ce sont des applications écrites en Java…

– À suivre :• Accès aux MBean depuis n’importe quelle application

– Locale ou distante

Page 31: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10231

Jconsole comme SensorClient

• SensorMBean• Sensor

Instrumentation

• SensorAgent

• SensorClient

Outil de Sun jconsole

•SensorClient ou comment accéder au bean

Depuis une application java ordinaire ?

Page 32: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10232

Client : SensorClient, même JVM

public class SensorClient{

// même JVM // SensorAgent a = new SensorAgent(); préalable

MBeanServer mbs = …… // à la recherche du MBean ObjectName name = new ObjectName("SensorAgent:name=Sensor1"); // accès aux attributs par leur nom // accès à l’attribut, getValue() System.out.println(mbs.getAttribute(name, "Value"));

// exécuter une opération Object[] paramètres = new Object[]{}; String[] signature = new String[]{}; mbs.invoke(name, "reset", paramètres, signature);

Page 33: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10233

Remarques

// même JVM

// SensorAgent a = new SensorAgent(); au préalable

// SensorAgent et le client ont accès au même MBeanServer

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

// à la recherche du MBean

ObjectName name = new ObjectName("SensorAgent:name=Sensor1");

// depuis une autre JVM, ce capteur n’est pas accessible (pour le moment)

Page 34: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10234

SensorClient & DynamicProxy

// accès à l’aide d’un dynamicProxy

SensorMBean sensor = (SensorMBean)

MBeanServerInvocationHandler.newProxyInstance( mbs, // MBeanServer

name, // ObjectName

SensorMBean.class, // interface

false); // détaillé par la suite

System.out.println(sensor.getValue());

sensor.reset();

DynamicProxy cf le cours Proxy … attention ici même JVM

Page 35: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10235

Résumé

• Instrumentation un MBean

• Serveur un agent qui pourrait devenir un MBean…

• Client même JVM, à l’aide d’un

mandataire dynamique

• Distribué jconsole, jvisualvm

Page 36: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10236

Notifications

• Réveil, alarmes, pannes …

– Ou bien Notifications, évènements asynchrones, réseau ?

• Patron Observateur distribué …– Publish-subscribe : filtre d’évènements possible

– Notifications • Vers des JVM installées sur la même machine• Vers des JVM distantes

Notification NotificationBroadcaster NotificationListener

Page 37: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10237

Réveil & notifications

• À la suite d’un changement d’état– Patron publish/subscribe, mode pull (pull : inscription à la demande du client)

Page 38: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10238

Comment ? notify

• Une classe prédéfinie–NotificationBroadcasterSupport

sendNotification(Notification notification)

Ajout/retrait d’un observateur/écouteuraddNotificationListener(

NotificationListener listener, NotificationFilter filter, Object handback) …

removeNotificationListener( …

Page 39: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10239

Comment : Listener

• L’interface NotificationListener

handleNotification(Notification notification,

Object handback)

Page 40: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10240

Comment ?

• A chaque changement d’état une notification est effectuée– sendNotification (new Notification(….,….,….));

• Éventuellement filtrée– Interface NotificationFilter

• boolean isNotificationEnabled(Notification notification) – Exécutée avant chaque notification

• Une notification : classe Notification– Constructeurs– Notification(String type, Object source, long sequenceNumber) – Notification(String type, Object source, long sequenceNumber, long timeStamp,

String message)

Page 41: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10241

Avec SensorMBean

public interface SensorMBean extends NotificationBroadcaster{

// getter/setter

public int getValue();

public void setValue(int val);

// operation

public void reset();

}

Page 42: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10242

jconsole a tout compris …

• L’item Notifications apparaît– Souscription possible depuis une autre JVM …

Page 43: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10243

Sensor

• A chaque modification de la valeur du capteur– Une notification est engendrée

– Notifications distantes sur le réseau

• Arrivée possible dans le désordre estampille

Page 44: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10244

Instrumentation & Notifications

public class Sensor extends NotificationBroadcasterSupport

implements SensorMBean{

public synchronized void setValue(int value){ this.value = value; this.sequenceNumber++; sendNotification( new Notification( "setValue", // un nom this, sequenceNumber, // un numéro System.currentTimeMillis(), // une estampille

Integer.toString(value))); // un message }

Page 45: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10245

L’  Agent & notifications

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

public class SensorAgent implements NotificationListener{ private MBeanServer mbs; public SensorAgent(){ try{ … mbean.addNotificationListener(this,null,null); }catch(Exception e){ e.printStackTrace(); } } public void handleNotification(

Notification notification, Object handback){ System.out.print(notification.getMessage()); System.out.println(" number : " + notification.getSequenceNumber());

}

Page 46: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10246

Client : jconsole & notifications

jconsole a souscrit

Page 47: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10247

SensorClient est un écouteur

public class SensorClient implements NotificationListener{

public void handleNotification( Notification notification, Object handback){

….

}

public static void main(String[] args) throws Exception { SensorAgent a = new SensorAgent(); // même JVM ici

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

ObjectName name = new ObjectName("SensorAgent:name=Sensor");

NotificationListener nl = new SensorClient();

SensorMBean sensor = (SensorMBean)

MBeanServerInvocationHandler.newProxyInstance(mbs, name, SensorMBean.class, false);

sensor.addNotificationListener(nl, null,null);

Page 48: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10248

SensorClient : le mandataire encore lui

SensorMBean sensor = (SensorMBean)

MBeanServerInvocationHandler.newProxyInstance(mbs, name, SensorMBean.class, true);

true

retourne un proxy qui impléménte l’interface NotificationEmitter,

soit la possibilité de retirer un écouteur de ce MBean (par procuration …)

SensorMBean sensor = (SensorMBean)

MBeanServerInvocationHandler.newProxyInstance(

mbs, name, SensorMBean.class, true);

((NotificationEmitter)sensor).removeNotificationListener(nl, null, null) ;

Page 49: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10249

Cycle de vie, pre, prede, post, postde

• interface MBeanRegistration

• Méthodes déclenchées – à l’installation du MBean pre…– à la désinstallation post

• Pour– Lire une configuration globale ou d’un autre MBean

– S’enquérir d’une valeur

– Mise à jour d’un journal

– …

Page 50: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10250

interface MBeanRegistration

interface MBeanRegistration{

public void postDeregister(); public void postRegister(Boolean done); public void preDeregister();

// le MBeanServer est transmis accès aux autres MBean public ObjectName preRegister(MBeanServer server, ObjectName name);

}

Un exemple : obtenir la valeur courante du capteurvia le MBean Sensor préalablement installé

Page 51: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10251

Exemple …

public interface SensorValuesMBean{ public int currentValue();}

public class SensorValues implements SensorValuesMBean, MBeanRegistration{ private MBeanServer server; private int value;

public void postDeregister(){} public void postRegister(Boolean done){} public void preDeregister(){} • public ObjectName preRegister(MBeanServer server, ObjectName name){• this.server = server;• try{• ObjectName name1 = new ObjectName("SensorAgent:name=Sensor1"); • if(server.isRegistered(name1)){• this.value = (Integer)server.getAttribute(name1,"Value");• }• }catch(Exception e){e.printStackTrace(); }• return name;• } public int currentValue(){return this.value;} }

Avec register, createMBean auprès de MBeanServer

Page 52: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10252

Petite conclusion

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

– Standard MBean comme suffixe … Instrumentation

– Enregistrement de ce MBean … Agent

– Supervision jconsole, clients• jvisualvm

– Notifications jconsole, clients

• À suivre…

Page 53: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10253

Sommaire

de plus près

Page 54: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10254

Instrumentation MBeans

5 types

• Standard : engendré depuis une interface xxxMBean– 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

Page 55: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10255

DynamicMBean

• Interface connue à l’exécution – Liste des attributs construite au démarrage du MBean

• Une description de ces attributs par exemple dans un fichier XML

• Soit un mandataire d’accès au MBean

Page 56: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10256

DynamicMBean

• Par introspection …– c’est un mandataire String/JVM

Page 57: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10257

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 …

Page 58: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10258

Exemple du capteur, il faut tout écrire…

public class SensorDynamic extends NotificationBroadcasterSupport implements DynamicMBean {

public SensorDynamic() { buildDynamicMBeanInfo(); }

public Object getAttribute(String attributeName) throws AttributeNotFoundException, MBeanException, ReflectionException { if (attributeName.equals("Value")) { return getValue(); }…

Voir http://java.sun.com/j2se/1.5.0/docs/guide/jmx/examples.html

Page 59: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10259

DynamicMBean

• Proposer une « signature » du composant– getMBeanInfo() retourne cette signature

– Les méta-données MBeanInfo décrivent les attributs, opérations et notifications

• Utilisation ad’hoc– Un adaptateur d’objets Java existants afin de les rendre « compatibles MBean »

Page 60: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10260

Instrumentation MBeans

5 types

• Standard : engendré depuis une interface xxxMBean

• 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

Page 61: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10261

ModelMBean

• Avertissement :– Model MBeans are a particularly advanced feature of the JMX API. It is perfectly

possible to produce an entirely adequate set of MBeans without ever using Model MBeans.

– Model MBeans are harder to program so they should only be used when there is a clear benefit.

• Donc …

• À lire : The Jakarta Commons Modeler from the Apache Software Foundation builds on the Model MBean framework to allow you to specify MBean interfaces, including descriptors etc, using XML. The attributes and operations mentioned in XML are forwarded to an instance of a Java class that does not have to be an MBean class. The main advantage of this approach is perhaps that the entire information model can be contained in a single XML file. The main disadvantage is that there is no Java interface corresponding to the management interface of a given MBean, which means that clients cannot construct proxies.

Page 62: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10262

Model

• configurable, une template à instancier lors de l’exécution

Extrait de http://www-128.ibm.com/developerworks/java/library/j-jmx2/

Page 63: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10263

ModelMBeanInfo

private ModelMBeanInfo createMBeanInfo() {

Descriptor atDesc = new DescriptorSupport(

new String[] { "name=Value",

"descriptorType=attribute",

"default=0",

"displayName=Value of the Sensor",

"getMethod=getValue",

"setMethod=setValue" } );

ModelMBeanAttributeInfo [] mmbai = new ModelMBeanAttributeInfo[1]; mmbai[0] = new ModelMBeanAttributeInfo("Value","java.lang.Integer",

"The Sensor Value", true,true, false, atDesc); …

Page 64: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10264

RequiredMBeanInfo

ObjectName name;

name = new ObjectName("MBean:name=Sensor");

RequiredModelMBean modelmbean;

modelmbean = new RequiredModelMBean(createMBeanInfo());

server.registerMBean(modelmbean, name);

Model MBeans are harder to program …

Page 65: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10265

Instrumentation MBeans

5 types

• Standard : engendré depuis une interface xxxMBean

• 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

Page 66: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10266

OpenMBean

• Limité à un sous-ensemble– Optimisé en espace et temps d’exécution– Seulement des types primitifs java– Et ne nécessite pas de recompilation, téléchargement de .class

• Voir OpenMBeanInfo

Page 67: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10267

Instrumentation MBeans

5 types

• Standard : engendré depuis une interface xxxMBean

• 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

Page 68: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10268

MXBean

• Compilation CompilationMXBean• Garbage collection system GarbageCollectorMXBean• Memory MemoryMXBean• Memory managersMemoryManagerMXBean• Threading ThreadMXBean• Operating system OperatingSystemMXBean• Runtime system RuntimeMXBean• Class loading system ClassLoadingMXBean• Memory resourcesMemoryPoolMXBean

Page 69: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10269

Un exemple : ThreadAgent, ThreadMXBean

public class ThreadAgent{

private MBeanServer mbs;

public ThreadAgent(){

try{

ThreadMXBean mbean = ManagementFactory.getThreadMXBean();

mbs = ManagementFactory.getPlatformMBeanServer();

ObjectName name = new ObjectName("ThreadAgent:name=thread1");

mbs.registerMBean(mbean, name);

}catch(Exception e){

e.printStackTrace();

}

}

public static void main(String[] args)throws Exception{ … new ThreadAgent(); … Thread.sleep(Long.MAX_VALUE);

Page 70: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10270

Distribué : jconsole (ThreadAgent==MemoryAgent … de la syntaxe)

Page 71: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10271

Sommaire

Agents

Page 72: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10272

Agents

• Adaptateurs et connecteurs

• MBean server

• Interrogation et listage

• Chargement dynamique

• Agent de services

Page 73: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10273

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

Page 74: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10274

Les connecteurs

• RMI• TCP dédié

Page 75: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10275

Rmi connecteur, SensorAgent

try {

MBeanServer mbs ….

name = new ObjectName("SensorAgent:name=Sensor2");

mbs.registerMBean(sensorBean, name);

// Quelle est l’URL, enregistrement auprès de l’annuaire rmi

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");

// Création du connecteur

JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);

// Démarrage du service

cs.start();

} catch(Exception e) {

}

Page 76: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10276

java/rmi + jconsole

• start rmiregistry 9999 l’annuaire

– Côté MBeanServer

Page 77: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10277

RmiClient enfin

public class RMIClient{ public static void main(String[] args) throws Exception{// à la recherche du connecteur 1) l’URL JMXServiceURL url = new

JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");

// tentaive de connexion, récupération d’un mandataire JMXConnector cs = JMXConnectorFactory.connect(url); MBeanServerConnection mbs = cs.getMBeanServerConnection();

ObjectName name = new ObjectName("SensorAgent:name=Sensor2"); System.out.println(" value : " + mbs.getAttribute(name, "Value"));

// … SensorMBean sensor = (SensorMBean) MBeanServerInvocationHandler.newProxyInstance( mbs, name, SensorMBean.class, false); System.out.println(sensor.getValue()); }}

Page 78: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10278

Notification distante…

import javax.management.NotificationEmitter;

public interface SensorMBean

extends NotificationEmitter {

// getter/setter public int getValue(); public void setValue(int val); // operations public void reset(); }

Page 79: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10279

Souscription auprès du MBean distant

url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://163.173.228.92:9999/server");

connector = JMXConnectorFactory.connect(url);

mbean = new ObjectName("SensorAgent:name=Sensor2");

// le mandataire, décidément

SensorMBean sensor = (SensorMBean) MBeanServerInvocationHandler.newProxyInstance(

connector.getMBeanServerConnection(),

mbean, SensorMBean.class, false);

sensor.addNotificationListener(this,null,null);

Page 80: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10280

NotificationEmitter

public void addNotificationListener

(ObjectName, NotificationListener, NotificationFilter, handback)

public void removeNotificationListener

(ObjectName name, NotificationListener listener)

Page 81: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10281

Exécution « distante » … «entre deux JVM

• SensorAgentAndRMI

Page 82: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10282

jconsole « distant » a souscrit

• En démo : plusieurs clients distants souscrivent– Quelles sont les incidences (mémoire,cpu,..) côté services ?

• jvisualvm pour une première évaluation ? Incidence de jvisualvm ?

Page 83: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10283

Supervision jvisualvm, CPU et où

• Quel(s) coût(s) à l’exécution du client ?

Page 84: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10284

Les adaptateurs

• Navigateur HTML HTTP adaptateur

Page 85: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10285

Html adaptateur, SensorAgent

try { MBeanServer mbs …. name = new ObjectName("SensorAgent:name=Sensor2"); mbs.registerMBean(sensorBean, name);

// Création et démarrage de l’adaptateur HtmlAdaptorServer adapter = new HtmlAdaptorServer();//* adapter.setPort(8088); name = new ObjectName("HtmlAdaptorServer:name=html,port=8088");

mbs.registerMBean(adapter, name); adapter.start();

• import com.sun.jdmk.comm.*; // 5.0.1 jdmkrt.jar• http://jfod.cnam.fr/NSY102/jms1.1/jdmkrt.jar

Page 86: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10286

un Client comme peut l’être un navigateur

Page 87: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10287

Client, navigateur

• Sans oublier jdmkrt.jar – Bluej voir le répertoire lib/userlib/ ou ./+libs/ – java -cp .;../JMX/jdmkrt.jar ThreadAgent

Page 88: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10288

A la recherche du MBean ?

• MBean en connaissant son nom : ok

• Tous les MBean d’un certain type ?

• Tous les MBean dont l’attribut « Value » == 10

• Tous les MBean dont l’attribut « Value » >= 10 et dont l’estampille < X

• « QL » pour les MBean ? MQL ?

– QueryExp – Expression booléenne

Page 89: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10289

QueryExp, comme composite…

QueryExp prob1 = Query.eq(Query.attr("inkLevel"), Query.value("LOW"));

QueryExp prob2 = Query.lt(Query.attr("paperCount"), Query.value(50));

QueryExp exp = Query.or(prob1, prob2);

• "(inkLevel = LOW) or (paperCount < 50)“

Set s = mBeanServer.queryBeans(

new ObjectName(“printer:*"), exp);

Page 90: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10290

Chargement dynamique de MBean

• Agent M-Let– register, unregister

• Description XML

Page 91: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10291

M-Let

• Comment – M-Let agent

Page 92: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10292

Chargement dynamique de MBean

• M-Let

– « URLClassLoader »

Associé à un descripteur en XML

<MLET CODE=Sensor ARCHIVE=sensor.jar CODEBASE=http://jfod.cnam.fr/NSY102/jmx/ NAME=Sensor:name=Sensor1>

</MLET>

• Descripteur XML, nommé sensor.mlet, à cette URL http://jfod.cnam.fr/NSY102/jmx/sensor.mlet

Page 93: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10293

Mlet en séquence

Page 94: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10294

Agent M-let

public MLetAgent(){

try{

mbs = ManagementFactory.getPlatformMBeanServer();

ObjectName name = new ObjectName("Services:name=mlet");

mbs.createMBean("javax.management.loading.MLet", name);

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");

JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs); cs.start();

}catch(Exception e){

e.printStackTrace();

}

}

Page 95: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10295

Agent M-Let

• Téléchargement dynamique du MBean Sensor– Appel de getMBeansFromURL("http://jfod.cnam.fr/NSY102/jmx/sensor.mlet")

SensorÀ la volée!

Page 96: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10296

MLetBean

public interface MLetMBean {

public Set getMBeansFromURL(String url) throws ServiceNotFoundException;

public Set getMBeansFromURL(URL url) throws ServiceNotFoundException;

public void addURL(URL url); public void addURL(String url) throws ServiceNotFoundException;

public URL[] getURLs(); public URL getResource(String name); public InputStream getResourceAsStream(String name);

public Enumeration getResources(String name) throws IOException; public String getLibraryDirectory();

public void setLibraryDirectory(String libdir); }

Page 97: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10297

M-Let File

<MLET CODE="className" | OBJECT="serializedObjectFileName" ARCHIVE="classOrJarFileName" [CODEBASE="relativePathToArchive"] [NAME="mbeanObjectName"] [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>

Page 98: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10298

Retrait dynamique de MBean

• mbs = ManagementFactory.getPlatformMBeanServer();

• ObjectName name=…• mbs.unregister(name)

– À faire avec jconsole …

Page 99: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY10299

Retour au sommaire

Page 100: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102100

Interrogations au sujet des MBeans

• MBeanInfo meta-data:mbs.getMBeanInfo(objName);– Dynamic comme Standard MBeans

• And you can also run a type-check:mbs.isInstanceOf(objName, className)

Page 101: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102101

Accès au MBean : MBeanInfo

• Interface respectée par un Mbean– Les attributs et les opérations disponibles– Ces instances sont immutables

• getClassName() – Le nom de la classe

• getConstructors() – La liste des constructeurs

• getAttributes() – La liste des attributs

• Syntaxe getName() et setName() Name est l’attribut

• getOperations() – Opérations accessibles

• Syntaxe autre qu’un attribut

• getNotifications() – À la condition que ce Mbean implémente l’interface NotificationBroadcaster

( Ce sera NotificationBroadcaster.getNotificationInfo() qui sera déclenchée)

Page 102: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102102

MBeanInfo et plus …

Page 103: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102103

Un petit dernier, une applette

• Comment intervenir sur une applette de navigateur …

• Est-ce bien utile ?– Supervision chez le client à son insu ?

• Ou comment intervenir sur une application téléchargée– Par exemple avec java web start– Toujours à son insu …

– Un petit et dernier exemple en 4 transparents• Une applette incluant serveur web supervisée chez le client

Page 104: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102104

JConsole et Applet

Extrait de http://blogs.sun.com/lmalventosa/

Développer1. une interface AppletteXXXXXMBean2. une classe AppletteXXXXX extends JApplet implements AppletteXXXXXMBean3. Puis générer l’archive AppletteXXXXX.jar

Générer un certificatkeytool -genkey -alias nsy -keypass PWD -keystore nsystore -storepass PWD

Signer l’archivejarsigner -keystore nsystore AppletteXXXXX.jar nsy

Exemple : ici http://jfod.cnam.fr/NSY102/AppletteServeurWeb.htmlC’est une page html standard

<applet code="AppletteServeurWeb.class" width=500 height=200 archive="AppletteServeurWeb.jar" >

Page 105: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102105

JConsole et Applet démo

Un client : http://localhost:8100/test/?param1=applette

Page 106: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102106

Jconsole et Applet : un exemple en images

• Cliquer sur valider engendre une nouvelle fenêtre avec le résultat de la requête effectuée en http://localhost:8100/test/?test=essai

Page 107: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102107

Jconsole et applet suite

• Un scenario :– 1) arreterServeurWeb– 2) demarrerServeurWeb port 8200– 3) ouvrir un nouvel onglet sur le navigateur puis recharger la page initiale

• 2 serveurs en cours d’exécution 8100 et 8200– 4) applet_i_2 est apparu dans l’onglet MBeans de jconsole– …

Page 108: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102108

L’interface « Mbean » de l’applette

public interface AppletteServeurWebMBean{

// opérations

public void demarrerServeurWeb(int port);

public void arreterServeurWeb();

// lectures, getter

public int getPort();

public boolean getServeurActif();

public String getHostCodeBase();

public String getDerniereRequete();

}

Page 109: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102109

L’applette, un extrait du code source

private static AtomicInteger applet_id = new AtomicInteger(1); private MBeanServer mbs; private ObjectName name;

public void init(){ // initialisation de l’applette

// et de son MBean ... mbs = ManagementFactory.getPlatformMBeanServer(); name = new ObjectName("AppletteMBean: type=AppletteServeurWeb, "+ "name=applet_id_" + applet_id.getAndIncrement()); mbs.registerMBean(this, name);

} public synchronized void stop(){ // terminaison de l’applette // et de son MBean ... mbs.unregisterMBean(name); }

source complet ici http://jfod.cnam.fr/NSY102/appletteServeurWebMBean/

Page 110: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102110

Conclusion

• JMX est bien un framework/canevas

– MBean– Plug-in

Plug-in et JMXinstaller pour voir celui-ci :http://blog.luminis.nl/luminis/entry/top_threads_plugin_for_jconsole voir également

http://blogs.sun.com/jmxetc/entry/ingo_rockel_thread_dump_plugin

jconsole et jvisualVM deux utiles outils de supervision, et simples d’utilisation …

Page 111: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102111

jconsole

• Les sources de sun : https://jdk6.dev.java.net/

• sun/tools/jconsole/  • sun/tools/jconsole/inspector/  • sun/tools/jconsole/resources/  • com/sun/tools/jconsole/  •

Page 112: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102112

Luis-Miguel Alventosa’s Blog

• http://blogs.sun.com/lmalventosa/

• Luis-Miguel Alventosa show how to use JMX Monitoring & Management with both Applets and Web Start Applications.  [July 6, 2006]

– http://blogs.sun.com/lmalventosa/entry/per_thread_cpu_usage_jconsole

• Voir aussi jconsole -pluginpath topthreads.jar – http://blog.luminis.nl/luminis/entry/top_threads_plugin_for_jconsole

Page 113: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102113

http://blog.luminis.nl/luminis/entry/top_threads_plugin_for_jconsole

• jconsole -pluginpath topthreads.jar – Onglet Top threads

Page 114: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102114

JMX-JBoss

• http://www.openknowledge.de/pdf/jax2003/JMX_2003_05_10.pdf

Page 115: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102115

Sécuriser les accès

• Extrait de http://blogs.sun.com/jmxnetbeans/date/20070816• http://jfod.cnam.fr/NSY102/jmx/TestSSLContext.java

Securing the ConnectorServer

Your agent code looks something like :

JMXConnectorServer server = JMXConnectorServerFactory. newJMXConnectorServer(new JMXServiceURL("service:jmx:ws:" + "//localhost:8080/jmxws"), null, ManagementFactory.getPlatformMBeanServer());

server.start();

So how do you enable HTTPS? Simply by changing the protocol name when creating the JMXServiceURL to be ws-secure instead of ws.

So now your code looks like : JMXConnectorServer server = JMXConnectorServerFactory. newJMXConnectorServer(new JMXServiceURL("service:jmx:ws-secure:" + "//localhost:8080/jmxws"), null, ManagementFactory.getPlatformMBeanServer()); server.start();

Page 116: NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin

NSY102116

Sécuriser les accès

• Are you done? Not yet, you need to provide a KeyStore location and a KeyStore password for SSL to find the certificates. You don't have a KeyStore or a certificate? Not a big deal, use keytool! For example call :

keytool -genkey -keystore jsr262Keystore -keyalg RSA

• java -classpath ... -Djavax.net.ssl.keyStore=jsr262Keystore -Djavax.net.ssl.keyStorePassword=123456 MyJMXAgent

• // Create the SSLContext SSLContext ctx = TestSSLContext.getInstance("SSLv3"); // Create an env map Map env = new HashMap(1); // Provide the SSLContext env.put("jmx.remote.ws.sslcontext", ctx); // Create the ConnectorServer providing the env map JMXConnectorServer server = JMXConnectorServerFactory. newJMXConnectorServer(new JMXServiceURL("service:jmx:ws-secure:" + "//localhost:8080/jmxws"), env, ManagementFactory.getPlatformMBeanServer());

• server.start();