La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin."— Transcription de la présentation:

1 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

2 NSY102 2 Sommaire Objectifs –Supervision dune 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

3 NSY102 3 Bibliographie utilisée La présentation de Christophe Ebro –http://rangiroa.essi.fr/cours/internet/02-JMX-partie2.pdfhttp://rangiroa.essi.fr/cours/internet/02-JMX-partie2.pdf Lindispensable tutoriel de Sun –http://java.sun.com/docs/books/tutorial/jmx/index.htmlhttp://java.sun.com/docs/books/tutorial/jmx/index.html –http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/ Hello world –http://java.sun.com/j2se/1.5.0/docs/guide/jmx/examples.htmlhttp://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/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.jsphttp://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/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://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

4 NSY102 4 Pré-requis Notions de –Introspection En tant quutilisateur –Client/serveur, Protocole JRMP( rmi) et HTTP –Patrons Factory, Publish-Subscribe, DynamicProxy

5 NSY102 5 JMX : Objectifs Supervision de JVM locales ou distantes –En cours dexé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 dune meilleure répartition Supervision –Performance –Des erreurs/ exceptions –De létat (cf. cycle de vie)

6 NSY102 6 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 dun interblocage Accès aux ressources de lOS Gestion dapplication de type MBean Gestion de serveurs Gestion dapplettes ! –Au sein dun navigateur … …

7 NSY102 7 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.jsphttp://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/

8 NSY102 8 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)

9 NSY102 9 Schéma de Christophe Ebro de Sun 3 niveaux instrumentation, serveur, distribué JVM

10 NSY102 10 Objectifs rappel contexte JVM Accès à une JVM « de lextérieur » –Supervision dune JVM en cours dexécution … Gestion dobjets 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 dobjets MBean Un premier exemple …

11 NSY102 11 Par lexemple : un capteur… SensorMBeanInstrumentation –Un capteur / une mesure SensorAgentServeur –Installation du service Outil jconsoleDistribué –Un client en standard (j2SE)

12 NSY102 12 Un exemple en introduction SensorMBean Sensor Instrumentation SensorAgent Serveur Outil de Sun jconsole Distribué

13 NSY102 13 Les classes en présence SensorMBean.java –Une interface, les méthodes proposées Sensor.java –Une implémentation de linterface 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

14 NSY102 14 Instrumentation, Standard MBean public interface Sensor MBean { // getter/setter public int getValue(); public void setValue(int val); // operations public void reset(); } MBean suffixe imposé … syntaxe à respecter

15 NSY102 15 Remarques de lintrospecteur … getter/setter selon Sun, une convention décriture public int getValue(); public void setValue(int val); Un outil peut donc en déduire quil existe un attribut int value; accessible en lecture et en écriture

16 NSY102 16 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 …

17 NSY102 17 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){} }

18 NSY102 18 Démonstration SensorMBean s = new Sensor(2000); Une « mesure » toutes les deux secondes

19 NSY102 19 Agent ou impresario Lagent du bean se charge de –Linstallation (instanciation) du MBean –Lenregistrement auprès du serveur de MBeans MBeanServer Un nom unique lui est attribué –en général par lutilisateur, –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 –Dautres peuvent le faire : un autre MBean, le serveur, de lextérieur …

20 NSY102 20 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();

21 NSY102 21 Commentaires sur lagent 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

22 NSY102 22 Supervisions prédéfinies Outils –jconsole –jvisualVM –jps

23 NSY102 23 Distribué : jconsole Accès à lune 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

24 NSY102 24 Distribué : jconsole name=Sensor1 –Accès aux attributs getter/setter, par introspection

25 NSY102 25 Distribué : jconsole name=Sensor1 –opération reset()

26 NSY102 26 Distribué : jconsole Onglet Threads, un MXBean abordé par la suite –SensorAgent est bien endormi…

27 NSY102 27 Java VisualVM jvisualVM –https://visualvm.dev.java.net/download.htmlhttps://visualvm.dev.java.net/download.html https://visualvm.dev.java.net/docindex.html – jconsole global

28 NSY102 28 jvisualVM, puissant …

29 NSY102 29 jvisualVM, à essayer

30 NSY102 30 Résumé, Pause … MBean –Un composant Agent –Chargé du dialogue avec linfrastructure(canevas/framework) Jconsole, jvisualvm deux outils prédéfinis –Ce sont des applications écrites en Java… –À suivre : Accès aux MBean depuis nimporte quelle application –Locale ou distante

31 NSY102 31 Jconsole comme SensorClient SensorMBean Sensor Instrumentation SensorAgent SensorClient Outil de Sun jconsole SensorClient ou comment accéder au bean Depuis une application java ordinaire ?

32 NSY102 32 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 à lattribut, 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);

33 NSY102 33 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 nest pas accessible (pour le moment)

34 NSY102 34 SensorClient & DynamicProxy // accès à laide dun 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

35 NSY102 35 Résumé Instrumentation un MBean Serveur un agent qui pourrait devenir un MBean… Client même JVM, à laide dun mandataire dynamique Distribué jconsole, jvisualvm

36 NSY102 36 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

37 NSY102 37 Réveil & notifications À la suite dun changement détat –Patron publish/subscribe, mode pull (pull : inscription à la demande du client)

38 NSY102 38 Comment ? notify Une classe prédéfinie –NotificationBroadcasterSupport sendNotification(Notification notification) Ajout/retrait dun observateur/écouteur addNotificationListener( NotificationListener listener, NotificationFilter filter, Object handback) … removeNotificationListener( …

39 NSY102 39 Comment : Listener Linterface NotificationListener handleNotification(Notification notification, Object handback)

40 NSY102 40 Comment ? A chaque changement détat une notification est effectuée –sendNotification (new Notification(….,….,….)); Éventuellement filtrée –Interface NotificationFilter boolean isNotificationEnabled(Notification notification) isNotificationEnabled – 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)

41 NSY102 41 Avec SensorMBean public interface SensorMBean extends NotificationBroadcaster { // getter/setter public int getValue(); public void setValue(int val); // operation public void reset(); }

42 NSY102 42 jconsole a tout compris … Litem Notifications apparaît –Souscription possible depuis une autre JVM …

43 NSY102 43 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

44 NSY102 44 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 }

45 NSY102 45 L Agent & notifications Lagent 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()); }

46 NSY102 46 Client : jconsole & notifications jconsole a souscrit

47 NSY102 47 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);

48 NSY102 48 SensorClient : le mandataire encore lui SensorMBean sensor = (SensorMBean) MBeanServerInvocationHandler.newProxyInstance(mbs, name, SensorMBean.class, true); true retourne un proxy qui impléménte linterface 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) ;

49 NSY102 49 Cycle de vie, pre, prede, post, postde interface MBeanRegistration Méthodes déclenchées –à linstallation du MBean pre… –à la désinstallation post Pour –Lire une configuration globale ou dun autre MBean –Senquérir dune valeur –Mise à jour dun journal –…

50 NSY102 50 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 capteur via le MBean Sensor préalablement installé

51 NSY102 51 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

52 NSY102 52 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…

53 NSY102 53 Sommaire de plus près

54 NSY102 54 Instrumentation MBeans 5 types Standard : engendré depuis une interface xxxMBean –Voir lexemple de présentation Dynamic : nimporte quel objet, –fonctionnalités découvertes à lexé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

55 NSY102 55 DynamicMBean Interface connue à lexécution –Liste des attributs construite au démarrage du MBean Une description de ces attributs par exemple dans un fichier XML Soit un mandataire daccès au MBean

56 NSY102 56 DynamicMBean Par introspection … – cest un mandataire String/JVM

57 NSY102 57 Dynamic Accès de lextérieur … –possible avec des noms dattributs ou dopérations –Il sera possible de les télécharger …

58 NSY102 58 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

59 NSY102 59 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 adhoc –Un adaptateur dobjets Java existants afin de les rendre « compatibles MBean »

60 NSY102 60 Instrumentation MBeans 5 types Standard : engendré depuis une interface xxxMBean Dynamic : nimporte quel objet, –fonctionalités découvertes à lexé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

61 NSY102 61 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.Jakarta Commons Modeler

62 NSY102 62 Model configurable, une template à instancier lors de lexécution Extrait de http://www-128.ibm.com/developerworks/java/library/j-jmx2/

63 NSY102 63 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); …

64 NSY102 64 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 …

65 NSY102 65 Instrumentation MBeans 5 types Standard : engendré depuis une interface xxxMBean Dynamic : nimporte quel objet, –fonctionalités découvertes à lexé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

66 NSY102 66 OpenMBean Limité à un sous-ensemble –Optimisé en espace et temps dexécution –Seulement des types primitifs java –Et ne nécessite pas de recompilation, téléchargement de.class Voir OpenMBeanInfo

67 NSY102 67 Instrumentation MBeans 5 types Standard : engendré depuis une interface xxxMBean Dynamic : nimporte quel objet, –fonctionalités découvertes à lexécution Model : configurable, une template à instancier Open : limité à un ensemble de type Java MXBean : accès aux ressources de la JVM

68 NSY102 68 MXBean Compilation CompilationMXBean Garbage collection system GarbageCollectorMXBean Memory MemoryMXBean Memory managers MemoryManagerMXBean Threading ThreadMXBean Operating system OperatingSystemMXBean Runtime system RuntimeMXBean Class loading system ClassLoadingMXBean Memory resources MemoryPoolMXBean

69 NSY102 69 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);

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

71 NSY102 71 Sommaire Agents

72 NSY102 72 Agents Adaptateurs et connecteurs MBean server Interrogation et listage Chargement dynamique Agent de services

73 NSY102 73 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

74 NSY102 74 Les connecteurs RMI TCP dédié

75 NSY102 75 Rmi connecteur, SensorAgent try { MBeanServer mbs …. name = new ObjectName("SensorAgent:name=Sensor2"); mbs.registerMBean(sensorBean, name); // Quelle est lURL, enregistrement auprès de lannuaire 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) { }

76 NSY102 76 java/rmi + jconsole start rmiregistry 9999 lannuaire –Côté MBeanServer

77 NSY102 77 RmiClient enfin public class RMIClient{ public static void main(String[] args) throws Exception{ // à la recherche du connecteur 1) lURL JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server"); // tentaive de connexion, récupération dun 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()); }}

78 NSY102 78 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(); }

79 NSY102 79 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);

80 NSY102 80 NotificationEmitter public void addNotificationListener (ObjectName, NotificationListener, NotificationFilter, handback) public void removeNotificationListener (ObjectName name, NotificationListener listener)

81 NSY102 81 Exécution « distante » … « entre deux JVM SensorAgentAndRMI

82 NSY102 82 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 ?

83 NSY102 83 Supervision jvisualvm, CPU et où Quel(s) coût(s) à lexécution du client ?

84 NSY102 84 Les adaptateurs Navigateur HTML HTTP adaptateur

85 NSY102 85 Html adaptateur, SensorAgent try { MBeanServer mbs …. name = new ObjectName("SensorAgent:name=Sensor2"); mbs.registerMBean(sensorBean, name); // Création et démarrage de ladaptateur 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

86 NSY102 86 un Client comme peut lêtre un navigateur

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

88 NSY102 88 A la recherche du MBean ? MBean en connaissant son nom : ok Tous les MBean dun certain type ? Tous les MBean dont lattribut « Value » == 10 Tous les MBean dont lattribut « Value » >= 10 et dont lestampille < X « QL » pour les MBean ? MQL ? –QueryExp –Expression booléenne

89 NSY102 89 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);

90 NSY102 90 Chargement dynamique de MBean Agent M-Let –register, unregister Description XML

91 NSY102 91 M-Let Comment –M-Let agent

92 NSY102 92 Chargement dynamique de MBean M-Let –« URLClassLoader » Associé à un descripteur en XML Descripteur XML, nommé sensor.mlet, à cette URL http://jfod.cnam.fr/NSY102/jmx/sensor.mlet

93 NSY102 93 Mlet en séquence

94 NSY102 94 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(); }

95 NSY102 95 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!

96 NSY102 96 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); }

97 NSY102 97 M-Let File [ ] [ ] –Adaptés au constructeurs avec paramètres –Exemple

98 NSY102 98 Retrait dynamique de MBean mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName name=… mbs.unregister(name) –À faire avec jconsole …

99 NSY102 99 Retour au sommaire

100 NSY102 100 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)

101 NSY102 101 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 lattribut getOperations() –Opérations accessibles Syntaxe autre quun attribut getNotifications() –À la condition que ce Mbean implémente linterface NotificationBroadcaster NotificationBroadcaster ( Ce sera NotificationBroadcaster.getNotificationInfo() qui sera déclenchée) NotificationBroadcaster.getNotificationInfo()

102 NSY102 102 MBeanInfo et plus …

103 NSY102 103 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

104 NSY102 104 JConsole et Applet Extrait de http://blogs.sun.com/lmalventosa/ Développer 1.une interface AppletteXXXXXMBean 2.une classe AppletteXXXXX extends JApplet implements AppletteXXXXXMBean 3.Puis générer larchive AppletteXXXXX.jar Générer un certificat keytool -genkey -alias nsy -keypass PWD -keystore nsystore -storepass PWD Signer larchive jarsigner -keystore nsystore AppletteXXXXX.jar nsy Exemple : ici http://jfod.cnam.fr/NSY102/AppletteServeurWeb.html Cest une page html standard

105 NSY102 105 JConsole et Applet démo Un client : http://localhost:8100/test/?param1=applette

106 NSY102 106 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

107 NSY102 107 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 dexécution 8100 et 8200 –4) applet_i_2 est apparu dans longlet MBeans de jconsole –…

108 NSY102 108 Linterface « Mbean » de lapplette 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(); }

109 NSY102 109 Lapplette, un extrait du code source private static AtomicInteger applet_id = new AtomicInteger(1); private MBeanServer mbs; private ObjectName name; public void init(){ // initialisation de lapplette // 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 lapplette // et de son MBean... mbs.unregisterMBean(name); } source complet ici http://jfod.cnam.fr/NSY102/appletteServeurWebMBean/

110 NSY102 110 Conclusion JMX est bien un framework/canevas –MBean –Plug-in Plug-in et JMX installer 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 dutilisation …

111 NSY102 111 jconsole Les sources de sun : https://jdk6.dev.java.net/https://jdk6.dev.java.net/ sun/tools/jconsole/ sun/tools/jconsole/inspector/ sun/tools/jconsole/resources/ com/sun/tools/jconsole/

112 NSY102 112 Luis-Miguel Alventosas 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]AppletsWeb Start Applications –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

113 NSY102 113 http://blog.luminis.nl/luminis/entry/top_threads_plugin_for_jconsole jconsole -pluginpath topthreads.jar –Onglet Top threads

114 NSY102 114 JMX-JBoss http://www.openknowledge.de/pdf/jax2003/JMX_2003_05_10.pdf

115 NSY102 115 Sécuriser les accès Extrait de http://blogs.sun.com/jmxnetbeans/date/20070816http://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();

116 NSY102 116 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();


Télécharger ppt "NSY102 1 NSY102 Conception de logiciels Intranet JMX Java Management eXtension API Architecture à base de composants Cnam Paris jean-michel Douin, douin."

Présentations similaires


Annonces Google