Projets

Vous regardez une version antérieure (v. /wiki/spaces/PROJ/pages/164462605/3.25+JMX) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 18) afficher la version suivante »


JMX

Exemple: surveillance de la disponibilité d'un service CMIS par une application "cliente"

Une application de gestion de fichier 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  si le service CMIS est actif ou non. Le bean jmxTestCmis, *grâce à sa méthode *getCmisIsReady(), donne cette information.

Les propriétés et méthodes de ce bean sont exposés comme MBean  grâce à la classe Spring MBeanExporter.

Les beans Spring :

     <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 cliente 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.

public class CmisFileStorageServiceImpl  {
     ....

    /**
     * Bean to test if cmis is ready.
     */
    private JmxTestCmis jmxTestCmis;

    public void afterPropertiesSet() throws Exception {
        ....
        Assert.notNull(this.jmxTestCmis,
                "property jmxTestCmis of class " + this.getClass().getName() + " can not be null");
    }    
    ...
    /**
     * @param jmxTestCmis the jmxTestCmis to set
     */
    public void setJmxTestCmis(final JmxTestCmis jmxTestCmis) {
        this.jmxTestCmis = jmxTestCmis;
    }

    public FileStorage getFile(...) throws IOException {
        FileStorage file = null;
        if (jmxTestCmis.getCmisIsReady()) {
                         file= ...;
            
        }  else {
            System.err.println("--------le service CMIS est indisponible");
        }
        return file;
    }
}

Le bean JMX

package org.esupportail.application.services.fileStorage;
public interface JmxTestCmis {
    /**
     * Enable the use of CMIS.
     */
    void enabledCmis();
    
    /**
     * Disable the use of CMIS.
     */
    void disabledCmis();
    
    /**
     * @return the cmisIsReady
     */
    Boolean getCmisIsReady();
}

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 disabledCmis() {
        cmisIsReady = false;
    }

    @Override
    public void enabledCmis() {
        cmisIsReady = true;
    }
    
    public Boolean getCmisIsReady() {
        return cmisIsReady;
    }
}

L'activation du client JMX

Si l'application écoute le port jmx 9656,par exemple, au lancement de l'application, on aura les options suivantes:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9656
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

Activer l'agent JMX sur l'application administrée

L'agent JMX doit être activé sur l'application délivrant le service CMIS

activationJMX.sh

#!/bin/csh
set cmdLineJMXJar=/opt/admin-java/jmx/cmdline-jmxclient.jar
set jmxHost=host.etablissement.fr
set jmXPort=9656
#No User and password so pass '-'
echo "active l'utilisation de CMIS pour les applications en ecoute sur le port 9656"
/opt/jdk1.6.0/bin/java -jar ${cmdLineJMXJar} - ${jmxHost}:${port} bean:name=testCmis enabled

desactivationJMX.sh

#!/bin/csh
set cmdLineJMXJar=/opt/admin-java/jmx/cmdline-jmxclient.jar
set port=9656
set jmxHost=host.etablissement.fr
#No User and password so pass '-'
echo "désactive l'utilisation de CMIS pour les applications en ecoute sur le port 9656"
/opt/jdk1.6.0/bin/java -jar ${cmdLineJMXJar} - ${jmxHost}:${port} bean:name=testCmis disabled
  • Aucune étiquette