jmx : supervision et administration des applications J2EE
27 février 2008 – 7:41
Java Management eXtension ou JMX est une API java permettant de surveiller une application existante. Cette technologie permet également d’intéragir sur l’application en cours d’exécution. Cette API a été intégré dans le J2SE à partir de la version 1.5. Dans l’exemple ci-dessous, nous utiliserons cette technologie afin de suivre le nombre d’objets mis en cache avec EHCache et JMX .
Acquisition de données (instrumentation) avec JMX
Le MBean (managed bean) est l’élément de base de JMX. Associé à un agent de supervision, il servira d’interface de communication avec les éléments gérés par JMX. On peut le voir comme une sonde effectuant une ou plusieurs mesures.
MBeanServer : l’agent de Supervision
Appelés agents ou serveurs JMX, ceux-ci sont chargés de recenser les MBeans. Chaque ajout ou supression d’un MBean donne lieu à une notification.
Spring et JMX
Comme à son habitude, Spring facilite l’intégration de JMX dans l’architecture d’une application. Il met à disposition des méthodes simples pour enregistrer de nouveaux MBean. Cette intégration se fait tout en conservant un faible couplage de l’application avec cette technologie.
Suivi des objets en cache avec EHCACHE et JMX dans une application SPRING
Afin de faciliter la mise en place de cette technologie, nous nous baserons sur une application fonctionnant sur le serveur d’application JBOSS.
Nous allons mettre un place un MBean qui effectuera un certain nombre de mesures afin de suivre l’évolution de la propriété MemoryStoreSize de notre cache.
Configuration Spring du MBean :
-
<bean id=“jmxCacheBean” class=“com.programmetvcesoir.jmx.JmxCache”></bean>
-
-
<property name=“cacheManager” ref=“cacheManagerID”></property>
La classe correspondante :
-
mport net.sf.ehcache.Cache ;
-
import net.sf.ehcache.CacheManager ;/**
-
* MBean permettant de surveiller et d‘adminitrer via jmx le cache géré par EHCACHE
-
* @author cestpasdur
-
*
-
*/
-
public class JmxCache
-
/**
-
* Manager de cache EHCACHE
-
*/
-
private CacheManager cacheManager ;public JmxCache()public long getMemoryStoreSize()Cache cache=cacheManager.getCache("1000_overflow_disk") ;
-
return cache.getMemoryStoreSize() ;public void removeAll()Cache cache=cacheManager.getCache("1000_overflow_disk") ;
-
cache.removeAll() ;
-
public void setCacheManager(CacheManager cacheManager)
-
this.cacheManager = cacheManager ;
Comme vous pouvez le voir, la valeur de la propriété cacheManager est injectée via la configuration Spring. Nous avons donc accès dans notre MBean à l’ensemble des propriétés du cacheManager, en l’occurence celle qui nous intéresse : memoryStoreSize (nombre d’objet en cache à un instant T).
Maintenant, notre MBean a besoin de communiquer avec un MBeanServer. La configuration suivante permet de localiser un server existant et de s’y connecter (dans notre cas, JBoss)
-
<bean id=“mbeanServer” class=“org.springframework.jmx.support.MBeanServerFactoryBean”></bean>
-
-
<property name=“locateExistingServerIfPossible” value=“true”></property>
C’est aussi simple que çà !Notre MBean va devoir notifier sa présence au MBeanServer en utilisant un MBeanExporter :
-
<bean id=“exporter” class=“org.springframework.jmx.export.MBeanExporter”></bean>
-
<property name=“beans”> <map> <entry key=“bean:name=jmxCacheBean” value-ref=“jmxCacheBean”>
-
</entry></map> </property>
-
<property name=“server” ref=“mbeanServer”></property>
Au démarrage du serveur, nous pouvons voir la présence du MBean dans les logs :
17:02:31,375 INFO [STDOUT] [2007-10-23 17:02:31][main] INFO org.springframework.jmx.export.MBeanExporter - Registering beans for JMX exposure on startup
17:02:31,375 INFO [STDOUT] [2007-10-23 17:02:31][main] DEBUG org.springframework.jmx.export.MBeanExporter - Located simple bean ‘bean:name=jmxCacheBean’ : registering with JMX server as MBean [bean:name=jmxCacheBean]
Voyons voir maintenant le résultat avec la console web JMX de JBoss. Vous pouvez constater que notre MBean est bien référencé sur le serveur d’applications.
tilisons maintenant une console JMX un peu plus pratique, vous avez la JConsole disponible via le jdk, dans mon cas c’est ici : c :\Program Files\Java\jdk1.6.0_03\bin\jconsole.exe ou bien vous pouvez télécharger la MC4J management consoleVoici un aperçu du manager de cache dans la console MC4J :
Cette impression d’écran représente une mesure effectuée sur le nombre d’objets en cache pendant une courte période durant laquelle le cache a été réinitialisé via la méthode removeAll de notre MBean JmxCache
J’espère que cette petite introduction aux extensions JMX vous a permis de comprendre ce qu’est JMX, et, d’en cerner un peu plus l’utilité.