...
La propriété "beans" de la classe MBeanExporter permet de savoir exactement quels beans doivent être exporté exportés au MBeanServer.
Spring JMX offre aussi la possibilité de créer un connecteur serveur pour permettre l'accès au MBeanServer à distance. Pour cela il utilise le connecteur JSR-160.
Exemple: surveillance
...
d'un service CMIS par une application "cliente"
Une application de gestion de fichier fichiers s'appuie sur un serveur CMIS pour stocker ses fichiers. Si ce serveur CMIS n'est pas disponible (pour maintenance, par exemple), l'application doit continuer à fonctionner en "mode dégradé" .
Le service cmisFileStorageService doit savoir en temps réel réel si le service CMIS est actif ou non. Le bean jmxTestCmis, * grâce à sa méthode *getCmisIsReady(), donne cette information.
Les attributs et méthodes de ce bean sont exposés comme MBean grâce à la classe Spring MBeanExporter.
Les définition des beans par Spring :
...
| Bloc de code |
|---|
<bean id="cmisFileStorageService" class="org.esupportail.application.service.fileStorage.CmisFileStorageServiceImpl" lazy-init="true">
<description>A bean to manage files upload and download to the CMIS server.</description>
...
<property name="jmxTestCmis" ref="jmxTestCmis"/>
</bean>
<bean id="jmxTestCmis"
class="org.esupportail.application.service.fileStorage.JmxTestCmisImpl">
...
</bean>
<!- JMX to control CMIS ->
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="beans">
<map>
<entry key="bean:name=testCmis" value-ref="jmxTestCmis"/>
</map>
</property>
</bean>
|
La classe métier
...
utilisant le bean JMX
Avant toute opération sur les fichiers elle contrôle la disponibilité du serveur CMIS et affiche un message d'erreur s'il n'est pas actif.
...
| Bloc de code |
|---|
package org.esupportail.application.services.fileStorage;
public interface JmxTestCmis {
/**
* Enable the use of CMIS.
*/
void enabledCmisenabled();
/**
* Disable the use of CMIS.
*/
void disabledCmisdisabled();
/**
* @return the cmisIsReady
*/
Boolean getCmisIsReady();
}
|
| Bloc de code |
|---|
package org.esupportail.application.services.fileStorage;
import java.io.Serializable;
public class JmxTestCmisImpl implements JmxTestCmis, Serializable {
/**
* True if cmis is ready.
* Default value = true.
*/
private Boolean cmisIsReady;
public JmxTestCmisImpl() {
super();
cmisIsReady = true;
}
@Override
public void disableCmisdisabled() {
cmisIsReady = false;
}
@Override
public void enableCmisenabled() {
cmisIsReady = true;
}
public Boolean getCmisIsReady() {
return cmisIsReady;
}
}
|
...
Activation de l'agent JMX
Si l'application écoute le port jmx 9656, par exemple, au lancement de l'application, on aura les options suivantes:
| Bloc de code |
|---|
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9656 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false |
...
Communication avec l'agent JMX
...
L'agent JMX doit être activé sur est appelé par l'application délivrant le service CMIS
...
- L'application cliente JMX ne fait ici que lire l'état du serveur CMIS. On pourrait imaginer aller plus loin et vouloir l'administrer à distance. Le serveur de MBean (MbeanServer)
- Le serveur de MBean (MbeanServer) utilisé ici est celui par défaut (celui de tomcat par exemple).
La console
La console java (jconsole) permet de visualiser et d'administrer les bean jmx instanciés sur un serveur d'application distant.

