JMXµÄÈ«³ÆΪJava Management Extensions. ¹ËÃû˼Ò壬ÊǹÜÀíJavaµÄÒ»ÖÖÀ©Õ¹¡£ÕâÖÖ»úÖÆ¿ÉÒÔ·½±ãµÄ¹ÜÀí¡¢¼à¿ØÕýÔÚÔËÐÐÖеÄJava³ÌÐò¡£³£ÓÃÓÚ¹ÜÀíỊ̈߳¬Äڴ棬ÈÕÖ¾Level£¬·þÎñÖØÆô£¬ÏµÍ³»·¾³µÈ¡£
¼ò½é
»ù±¾ÊõÓï
- MBean£ºÊÇManaged BeanµÄ¼ò³Æ£¬¿ÉÒÔ·ÒëΪ¡°¹ÜÀí¹¹¼þ¡±¡£ÔÚJMXÖÐMBean´ú±íÒ»¸ö±»¹ÜÀíµÄ×ÊԴʵÀý£¬Í¨¹ýMBeanÖб©Â¶µÄ·½·¨ºÍÊôÐÔ£¬Íâ½ç¿ÉÒÔ»ñÈ¡±»¹ÜÀíµÄ×ÊÔ´µÄ״̬ºÍ²Ù×ÝMBeanµÄÐÐΪ¡£ÊÂʵÉÏ£¬MBean¾ÍÊÇÒ»¸öJava Object£¬Í¬JavaBeanÄ£ÐÍÒ»Ñù£¬Íâ½çʹÓÃ×ÔÐѺͷ´ÉäÀ´»ñÈ¡ObjectµÄÖµºÍµ÷ÓÃObjectµÄ·½·¨£¬Ö»ÊÇMBean¸üΪ¸´ÔӺ͸߼¶Ò»Ð©¡£MBeanͨ¹ý¹«¹²·½·¨ÒÔ¼°×ñ´ÓÌض¨µÄÉè¼Æģʽ·â×°ÁËÊôÐԺͲÙ×÷£¬ÒԱ㱩¶¸ø¹ÜÀíÓ¦ÓóÌÐò¡£ÀýÈ磬һ¸öÖ»¶ÁÊôÐÔÔÚ¹ÜÀí¹¹¼þÖÐÖ»ÓÐGet·½·¨£¬¼ÈÓÐGetÓÖÓÐSet·½·¨±íʾÊÇÒ»¸ö¿É¶ÁдµÄÊôÐÔ¡£Ò»¹²ÓÐËÄÖÖÀàÐ͵ÄMBean: Standard MBean, Dynamic MBean, Open MBean, Model MBean¡£
- MBeanServer£ºMBeanÉú´æÔÚÒ»¸öMBeanServerÖС£MBeanServer¹ÜÀíÕâЩMBean£¬²¢ÇÒ´úÀíÍâ½ç¶ÔËüÃǵķÃÎÊ¡£²¢ÇÒMBeanServerÌṩÁËÒ»ÖÖ×¢²á»úÖÆ£¬ÊǵÄÍâ½ç¿ÉÒÔͨ¹ýÃû×ÖÀ´µÃµ½ÏàÓ¦µÄMBeanʵÀý¡£
- JMX Agent£ºAgentÖ»ÊÇÒ»¸öJava½ø³Ì£¬Ëü°üÀ¨Õâ¸öMBeanServerºÍһϵÁи½¼ÓµÄMbeanService¡£µ±È»ÕâЩServiceÒ²ÊÇͨ¹ýMBeanµÄÐÎʽÀ´·¢²¼¡£
- Protocol Adapters and Connectors£ºMBeanServerÒÀÀµÓÚProtocol AdaptersºÍConnectorsÀ´ºÍÔËÐиôúÀíµÄJavaÐéÄâ»úÖ®ÍâµÄ¹ÜÀíÓ¦ÓóÌÐò½øÐÐͨÐÅ¡£Protocol Adaptersͨ¹ýÌض¨µÄÐÒéÌṩÁËÒ»ÕÅ×¢²áÔÚMBeanServerµÄMBeanµÄÊÓͼ¡£ÀýÈ磬һ¸öHTML Adapter¿ÉÒÔ½«ËùÓÐ×¢²á¹ýµÄMBeanÏÔʾÔÚWeb Ò³ÃæÉÏ¡£²»Í¬µÄÐÒ飬Ìṩ²»Í¬µÄÊÓͼ¡£Connectors»¹±ØÐëÌṩ¹ÜÀíÓ¦ÓÃÒ»·½µÄ½Ó¿ÚÒÔʹ´úÀíºÍ¹ÜÀíÓ¦ÓóÌÐò½øÐÐͨÐÅ£¬¼´Õë¶Ô²»Í¬µÄÐÒ飬Connectors±ØÐëÌṩͬÑùµÄÔ¶³Ì½Ó¿ÚÀ´·âװͨÐŹý³Ì¡£µ±Ô¶³ÌÓ¦ÓóÌÐòʹÓÃÕâ¸ö½Ó¿Úʱ£¬¾Í¿ÉÒÔͨ¹ýÍøÂç͸Ã÷µÄºÍ´úÀí½øÐн»»¥£¬¶øºöÂÔÐÒé±¾Éí¡£AdaptersºÍConnectorsʹMBean·þÎñÆ÷Óë¹ÜÀíÓ¦ÓóÌÐòÄܽøÐÐͨÐÅ¡£Òò´Ë£¬Ò»¸ö´úÀíÒª±»¹ÜÀí£¬Ëü±ØÐëÌṩÖÁÉÙÒ»¸öProtocol Adapter»òÕßConnector¡£ÃæÁÙ¶àÖÖ¹ÜÀíÓ¦ÓÃʱ£¬´úÀí¿ÉÒÔ°üº¬¸÷ÖÖ²»Í¬µÄProtocol AdaptersºÍConnectors¡£µ±Ç°ÒѾʵÏֺͽ«ÒªÊµÏÖµÄProtocol AdaptersºÍConnectors°üÀ¨£º RMI Connector, SNMP Adapter, IIOP Adapter, HTML Adapter, HTTP Connector.
Adapter ºÍConnectorµÄÇø±ðÔÚÓÚ£ºAdapterÊÇʹÓÃijÖÖInternetÐÒéÀ´ÓëJMX Agent»ñµÃÁªÏµ£¬Agent¶Ë»áÓÐÒ»¸ö¶ÔÏó (Adapter)À´´¦ÀíÓйØÐÒéµÄϸ½Ú¡£±ÈÈçSNMP AdapterºÍHTTP Adapter¡£¶øConnectorÔòÊÇʹÓÃÀàËÆRPCµÄ·½Ê½À´·ÃÎÊAgent£¬ÔÚAgent¶ËºÍ¿Í»§¶Ë¶¼±ØÐëÓÐÕâÑùÒ»¸ö¶ÔÏóÀ´´¦ÀíÏàÓ¦µÄÇëÇóÓëÓ¦´ð¡£±ÈÈçRMI Connector¡£
JMX Agent¿ÉÒÔ´øÓÐÈÎÒâ¶à¸öAdapter£¬Òò´Ë¿ÉÒÔʹÓöàÖÖ²»Í¬µÄ·½Ê½·ÃÎÊAgent¡£
JMX»ù±¾¹¹¼Ü
JMX·ÖΪÈý²ã£¬·Ö±ð¸ºÔð´¦Àí²»Í¬µÄÊÂÎñ¡£ËüÃÇ·Ö±ðÊÇ£º
Instrumentation ²ã
Instrumentation²ãÖ÷Òª°üÀ¨ÁËһϵÁеĽӿڶ¨ÒåºÍÃèÊöÈçºÎ¿ª·¢MBeanµÄ¹æ·¶¡£Í¨³£JMXËù¹ÜÀíµÄ×ÊÔ´ÓÐÒ»¸ö»ò¶à¸öMBean×é³É£¬Òò´ËÕâ¸ö×ÊÔ´¿ÉÒÔÊÇÈκÎÓÉJavaÓïÑÔ¿ª·¢µÄ×é¼þ£¬»òÊÇÒ»¸öJavaWrapper°ü×°µÄÆäËûÓïÑÔ¿ª·¢µÄ×ÊÔ´¡£
Agent ²ã
Agent ÓÃÀ´¹ÜÀíÏàÓ¦µÄ×ÊÔ´£¬²¢ÇÒΪԶ¶ËÓû§Ìṩ·ÃÎʵĽӿڡ£Agent²ã¹¹½¨ÔÚIntrumentation²ãÖ®ÉÏ£¬²¢ÇÒʹÓò¢¹ÜÀí Instrumentation²ãÄÚ²¿ÃèÊöµÄ×é¼þ¡£Agent²ãÖ÷Òª¶¨ÒåÁ˸÷ÖÖ·þÎñÒÔ¼°Í¨ÐÅÄ£ÐÍ¡£¸Ã²ãµÄºËÐÄÊÇÒ»MBeanServer,ËùÓеÄMBean¶¼ÒªÏòËü×¢²á£¬²ÅÄܱ»¹ÜÀí¡£×¢²áÔÚMBeanServerÉϵÄMBean²¢²»Ö±½ÓºÍÔ¶³ÌÓ¦ÓóÌÐò½øÐÐͨÐÅ£¬ËûÃÇͨ¹ýÐÒéÊÊÅäÆ÷£¨Adapter£©ºÍÁ¬½ÓÆ÷£¨Connector£©½øÐÐͨÐÅ¡£Í¨³£AgentÓÉÒ»¸öMBeanServerºÍ¶à¸öϵͳ·þÎñ×é³É¡£JMX Agent²¢²»¹ØÐÄËüËù¹ÜÀíµÄ×ÊÔ´ÊÇʲô¡£
Distributed ²ã
Distributed²ã¹ØÐÄAgentÈçºÎ±»Ô¶¶ËÓû§·ÃÎʵÄϸ½Ú¡£Ëü¶¨ÒåÁËһϵÁÐÓÃÀ´·ÃÎÊAgentµÄ½Ó¿ÚºÍ×é¼þ£¬°üÀ¨AdapterºÍConnectorµÄÃèÊö¡£
Èç¹ûÒ»¸öJava¶ÔÏó¿ÉÒÔÓÉÒ»¸ö×ñÑJMX¹æ·¶µÄ¹ÜÀíÆ÷Ó¦ÓùÜÀí£¬ÄÇôÕâ¸öJava¶ÔÏó¾Í¿ÉÒÔÓÉJMX¹ÜÀí×ÊÔ´¡£ÒªÊ¹Ò»¸öJava¶ÔÏó¿É¹ÜÀí£¬Ôò±ØÐë´´½¨ÏàÓ¦µÄMBean¶ÔÏ󣬲¢Í¨¹ýÕâЩMBean¶ÔÏó¹ÜÀíÏàÓ¦µÄJava¶ÔÏó¡£µ±ÓµÓÐMBeanÀàºó£¬ÐèÒª½«ÆäʵÀý»¯²¢×¢²áµ½MBeanServerÉÏ¡£
ÏêÊö
ÕâÀï²ÉÓõÄÊÇJDK7£¬JDK7ÖÐÒѾ°üº¬ÁËjmx£¬µ«ÊÇÈç¹ûÓõ½HtmlAdaptorServerÀࣨºóÃæ»á¿´µ½£©»¹ÐèÒªÓõ½jmxtools.jar, ¿ÉÒÔÈ¥ÕâÀïÏÂÔØ£¬ÓÐÁ½¸ö°ü£ºjmx-1_2_1-ri.zip£» jmx_remote-1_0_1_03-ri.zip¡£jmx-1_2_1-ri.zip½âѹºólibÖÐÓÐjmxri.jarºÍjmxtools.jar,½«jmxtool.jar¿½±´³öÀ´·ÅÈëclasspathÖм´¿É£¨jmxri.jarÔÚJDK5+ÒѾ°ü±»°üº¬ÁË£©¡£
Standard MBean
Standard MBeanµÄÉè¼ÆºÍʵÏÖÊÇ×î¼òµ¥µÄ£¬ËüÃǵĹÜÀí½Ó¿Úͨ¹ý·½·¨ÃûÀ´ÃèÊö¡£Standard MBeanµÄʵÏÖÒÀ¿¿Ò»×éÃüÃû¹æÔò£¬³Æ֮ΪÉè¼Æģʽ¡£ÕâЩÃüÃû¹æÔò¶¨ÒåÁËÊôÐԺͲÙ×÷¡£
¼ì²éStandard MBean½Ó¿ÚºÍÓ¦ÓÃÉè¼ÆģʽµÄ¹ý³Ì±»³ÆΪÄÚÊ¡£¨Introspection£©¡£JMX´úÀíͨ¹ýÄÚÊ¡À´²é¿´Ã¿Ò»¸ö×¢²áÔÚMBeanServerÉϵÄMBeanµÄ·½·¨ºÍ³¬À࣬¿´ËüÊÇ·ñ×ñ´ÓÒ»¶¨Éè¼Æģʽ£¬¾ö¶¨ËüÊÇ·ñ´ú±íÁËÒ»¸öMBean£¬²¢±æÈϳöËüµÄÊôÐԺͲÙ×÷¡£
Standard MBeanÊÇJMX¹ÜÀí¹¹¼þÖÐ×î¼òµ¥µÄÒ»ÖÖ£¬Ö»ÐèÒª¿ª·¢Ò»¸öMBean½Ó¿Ú£¨ÎªÁËʵÏÖStandard MBean£¬±ØÐë×ñÑÒ»Ì׼̳й淶¡£±ØÐëÿһ¸öMBean¶¨ÒåÒ»¸ö½Ó¿Ú£¬¶øÇÒÕâ¸ö½Ó¿ÚµÄÃû×Ö±ØÐëÊÇÆä±»¹ÜÀíµÄ×ÊÔ´µÄ¶ÔÏóÀàµÄÃû³ÆºóÃæ¼ÓÉÏ¡±MBean¡±£©£¬Ò»¸öʵÏÖMBean½Ó¿ÚµÄÀ࣬²¢ÇÒ°ÑËüÃÇ×¢²áµ½MBeanServerÖоͿÉÒÔÁË¡£
package com.test.jmx; public interface HelloMBean { public String getName(); public void setName(String name); public void printHello(); public void printHello(String whoNam