Développement de vos propres applications de supervision

Vous pouvez utiliser les interfaces PMI (Performance Monitoring Infrastructure) pour développer vos propres applications afin de collecter de d'afficher des informations relatives aux performances.

Pourquoi et quand exécuter cette tâche

Les trois interfaces suivantes sont disponibles : interface JMX (Java™ Machine Extension), interface client PMI et interface de servlet. Toutes les trois renvoient les mêmes données sous-jacentes.

[AIX Solaris HP-UX Linux Windows]L'interface JMX est accessible via l'outil AdminClient WebSphere Application Server comme le décrit la rubrique Développement d'une application de surveillance personnalisée à l'aide de l'interface JMX. The PMI client interface is a Java interface that works with Version 3.5.5 and newer. L'interface de servlet est peut-être la plus simple, nécessitant une programmation minimale, dans la mesure où la sortie est au format XML.
Fonction obsolète Fonction obsolète: L'interface client PMI est dépréciée dans Version 9.0. L'interface JMX est la méthode de collecte de données PMI recommandée.depfeat

[z/OS]L'interface JMX est accessible via l'outil AdminClient comme le décrit la rubrique Développement d'une application de surveillance personnalisée à l'aide de l'interface JMX. L'interface de client PMI est une interface Java. L'interface de servlet est peut-être la plus simple, nécessitant une programmation minimale, dans la mesure où la sortie est au format XML.

Procédure

  1. Développement de l'application de surveillance à l'aide du client PMI (déconseillé).
  2. Extraction des données de performance à l'aide de PerfServlet
  3. Compilation des applications de surveillance
  4. Exécution de vos nouvelles applications de supervision
  5. Développement d'une application de surveillance personnalisée à l'aide de l'interface JMX.
  6. Développement d'interfaces PMI (Version 4.0) (déconseillé).

Exemple

Cet exemple fournit un code utilisant directement l'API Java Management Extension (JMX). Pour des informations sur la compilation du code source, voir "Compilation des applications de surveillance".

package com.ibm.websphere.pmi;

import com.ibm.websphere.management.AdminClient;
import com.ibm.websphere.management.AdminClientFactory;
import com.ibm.websphere.management.exception.ConnectorException;
import com.ibm.websphere.management.exception.InvalidAdminClientTypeException;
import com.ibm.websphere.management.exception.*;

import java.util.*;
import javax.management.*;
import com.ibm.websphere.pmi.*;
import com.ibm.websphere.pmi.client.*;
import com.ibm.websphere.pmi.stat.*;

/**
 * Exemple de code utilisant l'API AdminClient pour obtenir des données PMI à partir de PerfMBean
 * et de MBeans individuels
 * 
 * @ibm-api
 */

public class PmiJmxTest implements PmiConstants 
{

    private AdminClient    ac = null;
    private ObjectName     perfOName   = null;
    private ObjectName     serverOName = null;
    private ObjectName     wlmOName    = null;
    private ObjectName     jvmOName    = null;
    private ObjectName     orbtpOName    = null;
    private boolean failed = false;
    private PmiModuleConfig[] configs = null;

    /**
     *  Crée un objet de test
     *  (Constructeur par défaut nécessaire pour la structure de test)
     */
    public PmiJmxTest() 
    {
    }

    /**
     * @param args[0] host
     * @param args[1] port, optional, default is 8880
     * @param args[2] connectorType, optional, default is SOAP connector
     *   
     */
    public static void main(String[] args) 
    {
        PmiJmxTest instance = new PmiJmxTest();

        // analyser les arguments et créer l'objet AdminClient
        instance.init(args);

        // parcourir tous les ObjectNames MBean et mettre en cache les noms pertinents
        instance.getObjectNames();

        boolean v6 = !(new Boolean(System.getProperty ("websphereV5Statistics"))).
					booleanValue();
        
        if( v6 )
        {
            // tester les API V6
            instance.doTestV6();
        }
        else
        {

            // définir le niveau, obtenir des données, afficher des données
            instance.doTest();

            // tester les données EJB
            instance.testEJB();

            // comment utiliser la méthode getStats JSR77 pour MBean individuel autre que PerfMBean
            instance.testJSR77Stats();
        }            

    }

    /**
     * analyser les arguments et getAdminClient
     */
    public void init(String[] args) 
    {

        try 
        {
            String  host    = null;
            String port = "8880";     
            String  connector = AdminClient.CONNECTOR_TYPE_SOAP;
            if (args.length < 1) {
                System.err.println("ERROR: Usage: PmiJmxTest <host> [<port>] [<connector>]");
                System.exit(2);
            }
            else 
            {
                host = args[0];

                if (args.length > 1)
                    port = args[1];

                if (args.length > 2)
                    connector = args[2];
            }

            if(host == null) {
                host = "localhost";
            }
            if (port == null) {
                port = "2809";
            }
            if (connector == null) {
                connector = AdminClient.CONNECTOR_TYPE_SOAP;
            }
            System.out.println("host=" + host + " , port=" + port + ",connector=" + connector);

            //--------------------------------------------------------------------
            // Obtenir l'objet ac pour AppServer
            //---------------------------------------------------------------------
            System.out.println("main: create the adminclient");
            ac = getAdminClient(host, port, connector);

        } 
        catch (Exception ex) 
        {
            failed = true;
            new AdminException(ex).printStackTrace();
            ex.printStackTrace();
        }
    }

    /**
     * obtenir AdminClient à l'aide de l'hôte, du port et du connecteur donnés
     */
    public AdminClient getAdminClient(String hostStr, String portStr, String 
				connector) {
        System.out.println("getAdminClient: host=" + hostStr + " , portStr=" + portStr);
        AdminClient ac = null;
        java.util.Properties props = new java.util.Properties();
        props.put(AdminClient.CONNECTOR_TYPE, connector);
        props.put(AdminClient.CONNECTOR_HOST, hostStr);
        props.put(AdminClient.CONNECTOR_PORT, portStr);

        /* définir les propriétés suivantes si la sécurité est activée et à l'aide du 
			connecteur SOAP */
        /* L'exemple suivant montre définir des propriétés pour le connecteur SOAP 
			lorsque la sécurité est activée.
           Voir la documentation Java AdminClient pour plus d'informations.
    	   Properties props = new Properties();    	
   	   props.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
   	   props.setProperty(AdminClient.CONNECTOR_PORT, "8880");
       props.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_
			TYPE_SOAP);
   	   props.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");
   	   props.setProperty(AdminClient.USERNAME, "test2");
   	  props.setProperty(AdminClient.PASSWORD, "user24test");
       	props.setProperty("javax.net.ssl.trustStore", 
		"C:/WebSphere/AppServer/etc/DummyClientTrustFile.jks");
	   props.setProperty("javax.net.ssl.keyStore", 
		"C:/WebSphere/AppServer/etc/DummyClientKeyFile.jks");
	   props.setProperty("javax.net.ssl.trustStorePassword", "WebAS");
	   props.setProperty("javax.net.ssl.keyStorePassword", "WebAS");
        */ 

        try {
            ac = AdminClientFactory.createAdminClient(props);
        }
        catch(Exception ex) {
            failed = true;
            new AdminException(ex).printStackTrace();
            System.out.println("getAdminClient: exception");
        }
        return ac;
    }


    /**
     * obtenir tous les noms d'objet ObjectName.
     */
    public void getObjectNames() {

        try {

            //--------------------------------------------------------------------
            // Obtenir une liste de noms d'objet
            //--------------------------------------------------------------------
            javax.management.ObjectName on = new javax.management.ObjectName("WebSphere:*");

            //---------------------------------------------------------------------
            // obtenir tous les noms d'objet pour ce serveur
            //--------------------------------------------------------------------
           Set objectNameSet= ac.queryNames(on, null);

            //--------------------------------------------------------------------
            // obtenir les noms d'objet souhaités : Perf, Server, JVM, WLM (applicable uniquement dans ND)
            //--------------------------------------------------------------------
            if(objectNameSet != null) {
                Iterator i = objectNameSet.iterator ();
                while (i.hasNext()) {
                    on = (ObjectName)i.next();
                    String type = on.getKeyProperty("type");

                    // supprimer la mise en commentaire si vous souhaitez imprimer ObjectName pour chaque MBean
                    // System.out.println("\n\n" + on.toString());

                    // rechercher les MBeans souhaités
                    if(type != null && type.equals("Perf")) {
                        System.out.println("\nMBean: perf =" + on.toString());
                        perfOName = on;
                    }
                    if(type != null && type.equals("Server")) {
                        System.out.println("\nMBean: Server =" + on.toString());
                        serverOName = on;
                    }
                    if(type != null && type.equals("JVM")) {
                        System.out.println("\nMBean: jvm =" + on.toString());
                        jvmOName = on;
                    }
                    if(type != null && type.equals("WLMAppServer")) {
                        System.out.println("\nmain: WLM =" + on.toString());
                        wlmOName = on;
                    }
                    if(type != null && type.equals("ThreadPool")) 
                    {
                        String name = on.getKeyProperty("name");
                        if (name.equals("ORB.thread.pool"))
                            System.out.println("\nMBean: ORB ThreadPool =" + on.toString());
                        orbtpOName = on;
                    }
                }
            }
            else {
                System.err.println("main: ERROR: no object names found");
                System.exit(2);
            }

            // Vous devez disposer de Perf MBean pour obtenir des données PMI.
            if (perfOName == null) 
            {
                System.err.println("main: cannot get PerfMBean. Make sure PMI is enabled");
                System.exit(3);
            }
        }
        catch (Exception ex) 
        {
            failed = true;
            new AdminException(ex).printStackTrace();
            ex.printStackTrace();
        }

    }

    /** Tester les API V6 */
    public void doTestV6 ()
    {
        System.out.println ("\ndoTestV6() output:\n");

        // les méthodes suivantes sont spécifiques de V6 et démontrent l'API V6, définissez donc l'indicateur à false
        String v5PropFlag = System.setProperty ("websphereV5Statistics", "false");
        try
        {        
            Object[] params;
            String[] signature;
    
            // obtenir un ensemble de statistiques utilisé pour la surveillance
            System.out.println ("\nCurrent statistic set: " + ac.invoke(perfOName, "getStatisticSet", null, null));
    

            // obtenir toutes les statistiques du serveur à l'aide de Perf MBean
            System.out.println ("\nGet all statistics in PMI tree");
            signature = new String[]{"[Lcom.ibm.websphere.pmi.stat.StatDescriptor;","java.lang.Boolean"};
            params = new Object[] {new StatDescriptor[]{new StatDescriptor(null)}, new Boolean(true)};
    
            com.ibm.websphere.pmi.stat.WSStats[] wsStats = (com.ibm.websphere.pmi.stat.WSStats[])
            ac.invoke(perfOName, "getStatsArray", params, signature);   
            System.out.println (wsStats[0].toString());


            // obtenir des statistiques d'un JVM MBean à l'aide de J2EE JMX
            System.out.println ("\nGet JVM statistics using JVM MBean");
            javax.management.j2ee.statistics.Stats j2eeStats = (javax.management.j2ee.statistics.Stats) 
            ac.getAttribute(jvmOName, "stats");
            System.out.println (j2eeStats.toString());


            // obtenir des statistiques d'un pool d'unités d'exécution -- pool d'unités d'exécution WebContainer
            System.out.println ("\nGet statistics for a specific thread pool");
            signature = new String[]{"[Lcom.ibm.websphere.pmi.stat.StatDescriptor;","java.lang.Boolean"};

            StatDescriptor webContainerPoolSD = new StatDescriptor (new String[] {WSThreadPoolStats.NAME, 
					"WebContainer"});
            params = new Object[] {new StatDescriptor[]{webContainerPoolSD}, new Boolean(true)};
    
            wsStats = (com.ibm.websphere.pmi.stat.WSStats[])
            ac.invoke(perfOName, "getStatsArray", params, signature);   
            System.out.println (wsStats[0].toString());


            // définir la surveillance à l'ensemble de statistiques "extended"
            System.out.println ("\nSet monitoring to statistic set 'Extended'");
            signature = new String[]{"java.lang.String"};
            params = new Object[] {StatConstants.STATISTIC_SET_EXTENDED};
    
            ac.invoke (perfOName, "setStatisticSet", params, signature);   
            
            // obtenir un ensemble de statistiques utilisé pour la surveillance
            System.out.println ("\nCurrent statistic set: "+ ac.invoke(perfOName, "getStatisticSet", null, null));

            
            // activer sélectivement des statistiques pour tous les pools d'unités d'exécution
            System.out.println ("\nSelectively enable statistics (ActiveCount and PoolSize statistics) 
					 for thread pool -- fine grained control");

            StatDescriptor threadPoolSD = new StatDescriptor (new String[]
			{WSThreadPoolStats.NAME});    
                // créer un objet spec pour active ActiveCount et PoolSize sur le pool d'unités d'exécution
            StatLevelSpec[] spec = new StatLevelSpec[1];
            spec[0] = new StatLevelSpec (threadPoolSD.getPath(), new int[] 
			{WSThreadPoolStats.ActiveCount, WSThreadPoolStats.PoolSize});
            
            signature = new String[]{"[Lcom.ibm.websphere.pmi.stat.StatLevelSpec;","java.lang.Boolean"};
            params = new Object[] {spec, new Boolean(true)};                
               
            ac.invoke(perfOName, "setInstrumentationLevel", params, signature);


            // obtenir un ensemble de statistiques utilisé pour la surveillance
            System.out.println ("\nCurrent statistic set: "+ ac.invoke(perfOName, "getStatisticSet", null, null));

            // obtenir les statistiques de tous les pools d'unités d'exécution
            System.out.println ("\nGet statistics from all thread pools");
            signature = new String[]{"[Lcom.ibm.websphere.pmi.stat.StatDescriptor;","java.lang.Boolean"};
            params = new Object[] {new StatDescriptor[]{threadPoolSD},new Boolean(true)};
    
            wsStats = (com.ibm.websphere.pmi.stat.WSStats[])
            ac.invoke(perfOName, "getStatsArray", params, signature);   
            System.out.println (wsStats[0].toString());

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        // définir la propriété à la valeur d'origine
        System.setProperty ("websphereV5Statistics", v5PropFlag);
    }
        
    /**
     * Exemple de code pour définir le niveau, obtenir des données et les afficher. (V5)
     * @deprecated Use 6.0 APIs.
     */
    public void doTest() 
    {
        try 
        {
            // obtenez d'abord toutes les configs  - permet de définir des informations statiques pour Stats 
            // Remarque : le serveur ne renvoie que les informations de valeur et d'heure. 
            //       Aucune description, unité, etc n'est renvoyé avec des données PMI pour réduire le coût de communication.
            //       Vous devez appeler setConfig pour lier les informations statiques et les données Stats ultérieurement.
            configs = (PmiModuleConfig[])ac.invoke(perfOName, "getConfigs", null, null);

            // imprimer tous les modules PMI et les types mbean correspondants
            for (int i=0; i<configs.length; i++)
                System.out.println("config: moduleName=" + configs[i].getShortName() + 
							", mbeanType=" + configs[i].getMbeanType());

            // définir le niveau d'instrumentation du serveur
            setInstrumentationLevel(serverOName, null, PmiConstants.LEVEL_HIGH);

            // exemple d'utilisation de StatDescriptor.
            // Notez que le module WLM est uniquement disponible dans ND.
            StatDescriptor sd = new StatDescriptor(new String[] {"wlmModule.server"});
            setInstrumentationLevel(wlmOName, sd, PmiConstants.LEVEL_HIGH);

            // exemple getInstrumentationLevel
            MBeanLevelSpec[] mlss = getInstrumentationLevel(wlmOName, sd, true);
            // vous pouvez appeler getLevel(), getObjectName(), getStatDescriptor() sur mlss[i]

            // obtenir des données sur le serveur
            Stats stats = getStatsObject(serverOName, true);
            System.out.println(stats.toString());

            // obtenir des données sur le sous-module de serveur WLM
            stats = getStatsObject(wlmOName, sd, true);
            if (stats == null)
                System.out.println("Cannot get Stats for WLM data");
            else 
                System.out.println(stats.toString());
            
            // obtenir des données sur JVM MBean
            stats = getStatsObject(jvmOName, true);
            processStats(stats);

            // obtenir des données pour plusieurs MBeans
            ObjectName[] onames = new ObjectName[]{orbtpOName, jvmOName};
            Object[] params = new Object[]{onames, new Boolean(true)};
            String[] signature = new String[]{"[Ljavax.management.ObjectName;", 
					 "java.lang.Boolean"};
            Stats[] statsArray = (Stats[])ac.invoke(perfOName, "getStatsArray", 
					 params, signature);
            // vous pouvez appeler toString ou processStats sur statsArray[i]

            if (!failed)
                System.out.println("All tests passed");
            else
                System.out.println("Some tests failed");
        }
        catch (Exception ex) 
        {
            new AdminException(ex).printStackTrace();
            ex.printStackTrace();
        }
    }


    /**
     * Exemple de code pour le niveau d'extraction
     */
    protected MBeanLevelSpec[] getInstrumentationLevel(ObjectName on, StatDescriptor sd, boolean recursive) 
    {
        if (sd == null)
            return getInstrumentationLevel(on, recursive);
        System.out.println("\ntest getInstrumentationLevel\n");
        try {
            Object[] params    = new Object[2];
            params[0] = new MBeanStatDescriptor(on, sd);
            params[1] = new Boolean(recursive);
            String[] signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanStatDescriptor", "java.lang.Boolean"};
            MBeanLevelSpec[] mlss = (MBeanLevelSpec[])ac.invoke(perfOName, "getInstrumentationLevel", params, signature);
            return mlss;
        }
        catch(Exception e) {
            new AdminException(e).printStackTrace();
            System.out.println("getInstrumentationLevel: Exception Thrown");
            return null;
        }
    }

    /**
     * Exemple de code pour le niveau d'extraction
     */
    protected MBeanLevelSpec[] getInstrumentationLevel(ObjectName on, 
					boolean recursive) {
        if (on == null)
            return null;
        System.out.println("\ntest getInstrumentationLevel\n");
        try {
            Object[] params = new Object[]{on, new Boolean(recursive)};
            String[] signature= new String[]{ "javax.management.ObjectName", 
					"java.lang.Boolean"};
            MBeanLevelSpec[] mlss = (MBeanLevelSpec[])ac.invoke(perfOName, 
					"getInstrumentationLevel", params, signature);
            return mlss;
        }
        catch(Exception e) {
            new AdminException(e).printStackTrace();
            failed = true;
            System.out.println("getInstrumentationLevel: Exception Thrown");
            return null;
        }
    }

    /**
     * Exemple de code pour le niveau de définition
     * @deprecated Use 6.0 APIs.
     */
    protected void setInstrumentationLevel(ObjectName on, StatDescriptor sd, 
					int level) {
        System.out.println("\ntest setInstrumentationLevel\n");
        try {
            Object[] params    = new Object[2];
            String[] signature    = null;
            MBeanLevelSpec[] mlss = null; 
            params[0] = new MBeanLevelSpec(on, sd, level);
            params[1] = new Boolean(true);

            signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanLevelSpec", "java.lang.Boolean"};
            ac.invoke(perfOName, "setInstrumentationLevel", params, signature);
        }
        catch(Exception e) {
            failed = true;
            new AdminException(e).printStackTrace();
            System.out.println("setInstrumentationLevel: FAILED: Exception Thrown");
        }
    }

    /**
     * Exemple de code pour extraire un objet Stats
     * @deprecated Use 6.0 APIs.
     */
    public Stats getStatsObject(ObjectName on, StatDescriptor sd, boolean 
					recursive) {

        if (sd == null)  
            return getStatsObject(on, recursive);

        System.out.println("\ntest getStatsObject\n");
        try {
            Object[] params    = new Object[2];
            params[0] = new MBeanStatDescriptor(on, sd);  // construct MBeanStatDescriptor
            params[1] = new Boolean(recursive);
            String[] signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanStatDescriptor", "java.lang.Boolean"};
            Stats stats  = (Stats)ac.invoke(perfOName, "getStatsObject", params, signature);
            
            if (stats == null) return null;

            
            // rechercher PmiModuleConfig et liez-le à des données
            String type = on.getKeyProperty("type");
            if (type.equals(MBeanTypeList.SERVER_MBEAN))
                setServerConfig(stats);
            else
                stats.setConfig(PmiClient.findConfig(configs, on));
            
            return stats;

        } catch(Exception e) {
            failed = true;
            new AdminException(e).printStackTrace();
            System.out.println("getStatsObject: Exception Thrown");
            return null;
        }
    }

    /**
     * Exemple de code pour extraire un objet Stats
     */
    public Stats getStatsObject(ObjectName on, boolean recursive) {
        if (on == null)  
            return null;

        System.out.println("\ntest getStatsObject\n");

        try {
            Object[] params  = new Object[]{on, new Boolean(recursive)};
            String[] signature = new String[] { "javax.management.ObjectName", 
					"java.lang.Boolean"};
            Stats stats  = (Stats)ac.invoke(perfOName, "getStatsObject", params, 
					signature);
            
            
            // rechercher PmiModuleConfig et liez-le à des données
            String type = on.getKeyProperty("type");
            if (type.equals(MBeanTypeList.SERVER_MBEAN))
                setServerConfig(stats);
            else
                stats.setConfig(PmiClient.findConfig(configs, on));
            
            return stats;

        } 
        catch(Exception e) {
            failed = true;
            new AdminException(e).printStackTrace();
            System.out.println("getStatsObject: Exception Thrown");
            return null;
        }
    }

    /**
     * Exemple de code pour naviguer et obtenir la valeur des données de l'objet Stats.
     */
    private void processStats(Stats stat) {
        processStats(stat, "");
    }

    /**
     * Exemple de code pour naviguer et obtenir la valeur des données de l'objet Stats 
			et Statistic.
     * @deprecated Use 6.0 APIs.
     */
    private void processStats(Stats stat, String indent) {
        if(stat == null)  return;

        System.out.println("\n\n");

        // extrayez le nom du Stats
        String name = stat.getName();
        System.out.println(indent + "stats name=" + name);

        // répertorier les noms de données
        String[] dataNames = stat.getStatisticNames();
        for (int i=0; i<dataNames.length; i++)
            System.out.println(indent + "    " + "data name=" + dataNames[i]);
        System.out.println("");

        // répertoriez toutes les données
        //com.ibm.websphere.management.statistics.Statistic[] allData = 
			stat.getStatistics();

        // Rattachez-les au type Statistique de PMI pour en extraire
davantage
        // Montrez également comment effectuer la traduction.
        //Statistic[] dataMembers = (Statistic[])allData;
        Statistic[] dataMembers = stat.listStatistics();
        if (dataMembers != null) {
            for(int i=0; i<dataMembers.length; i++) {
                System.out.print(indent + "    " + "data name=" + 
			PmiClient.getNLSValue(dataMembers[i].getName())
                                 + ", description=" + PmiClient.getNLSValue
			(dataMembers[i].getDescription())
                                 + ", startTime=" + dataMembers[i].getStartTime()
                                 + ", lastSampleTime=" + dataMembers[i].getLastSampleTime());
                if(dataMembers[i].getDataInfo().getType() == TYPE_LONG) {
                    System.out.println(", count=" + ((CountStatisticImpl)dataMembers[i]).getCount());
                }
                else if(dataMembers[i].getDataInfo().getType() == TYPE_STAT) {
                    TimeStatisticImpl data = (TimeStatisticImpl)dataMembers[i];
                    System.out.println(", count=" + data.getCount()
                                       + ", total=" + data.getTotal()
                                       + ", mean=" + data.getMean()
                                       + ", min=" + data.getMin()
                                       + ", max=" + data.getMax());
                }
                else if(dataMembers[i].getDataInfo().getType() == TYPE_LOAD) {
                    RangeStatisticImpl data = (RangeStatisticImpl)dataMembers[i];
                    System.out.println(", current=" + data.getCurrent()
                                       + ", integral=" + data.getIntegral()
                                       + ", avg=" + data.getMean()
                                       + ", lowWaterMark=" + data.getLowWaterMark()
                                       + ", highWaterMark=" + data.getHighWaterMark());
                }
            }
        }

        // de manière récursive pour substats
        Stats[] substats = (Stats[])stat.getSubStats();
        if(substats == null || substats.length == 0)
            return;
        for(int i=0; i<substats.length; i++) {
            processStats(substats[i], indent + "    ");
        }
    }

    /**
     * L'objet Stats renvoyé du serveur ne comporte pas d'informations de configuration statiques. 
		Vous devez le définir côté client.     
     */
    public void setServerConfig(Stats stats) {
        if(stats == null) return;
        if(stats.getType() != TYPE_SERVER) return;
        
        PmiModuleConfig config = null;

        Stats[] statList = stats.getSubStats();
        if (statList == null || statList.length == 0)
            return;
        Stats oneStat = null;
        for(int i=0; i<statList.length; i++) {
            oneStat = statList[i];
            if (oneStat == null) continue;
            config = PmiClient.findConfig(configs, oneStat.getStatsType());     
					//getName
            if(config != null)
                oneStat.setConfig(config);
            else 
            {                
                config = getStatsConfig (oneStat.getStatsType());
                if (config != null)
                    oneStat.setConfig(config);
                else
                    System.out.println("Error: get null config for " + oneStat.getStatsType());
            }
        }
    }

    /**
     * exemple de code pour montrer comment obtenir un MBeanStatDescriptor spécifique
     * @deprecated Use 6.0 APIs.
     */
    public MBeanStatDescriptor getStatDescriptor(ObjectName oName, String name) {
        try {
            Object[] params = new Object[]{serverOName};
            String[] signature= new String[]{"javax.management.ObjectName"};
            MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke
			(perfOName, "listStatMembers", params, signature);
            if (msds == null)
                return null;
            for (int i=0; i<msds.length; i++) {
                if (msds[i].getName().equals(name))
                    return msds[i];
            }
            return null;
        }
        catch(Exception e) {
            new AdminException(e).printStackTrace();
            System.out.println("listStatMembers: Exception Thrown");
            return null;
        }

    }

    /** 
     * exemple de code pour montrer comment naviguer dans MBeanStatDescriptor via 
				listStatMembers 
     * @deprecated Use 6.0 APIs.
     */
    public MBeanStatDescriptor[] listStatMembers(ObjectName mName) {
        if (mName == null)
            return null;

        try {
            Object[] params = new Object[]{mName};
            String[] signature= new String[]{"javax.management.ObjectName"};
            MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke
					(perfOName, "listStatMembers", params, signature);
            if (msds == null)
                return null;
            for (int i=0; i<msds.length; i++) {
                MBeanStatDescriptor[] msds2 = listStatMembers(msds[i]);
            }
            return null;
        }
        catch(Exception e) {
            new AdminException(e).printStackTrace();
            System.out.println("listStatMembers: Exception Thrown");
            return null;
        }

    }


    /**
     * Exemple de code pour extraire MBeanStatDescriptors
     * @deprecated Use 6.0 APIs.
     */
    public MBeanStatDescriptor[] listStatMembers(MBeanStatDescriptor mName) {
        if (mName == null)
            return null;

        try {
            Object[] params = new Object[]{mName};
            String[] signature= new String[]{"com.ibm.websphere.pmi.stat.MBeanStatDescriptor"};
            MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke(perfOName, "listStatMembers", 
					 params, signature);
            if (msds == null)
                return null;
            for (int i=0; i<msds.length; i++) {
                MBeanStatDescriptor[] msds2 = listStatMembers(msds[i]);
                // you may recursively call listStatMembers until find the one you want
            }
            return msds;
        }
        catch(Exception e) {
            new AdminException(e).printStackTrace();
            System.out.println("listStatMembers: Exception Thrown");
            return null;
        }

    }

    /** 
     * exemple de code pour extraire des données PMI à partir de beanModule
     * @deprecated Use 6.0 APIs.
     */
    public void testEJB() {

        // Il s'agit de MBeanStatDescriptor for Enterprise EJB
        MBeanStatDescriptor beanMsd = getStatDescriptor(serverOName, 
					PmiConstants.BEAN_MODULE);
        if (beanMsd == null)
            System.out.println("Error: cannot find beanModule");
        
        // obtenir le Stats pour le niveau de module uniquement car la condition récursive est fausse
        Stats stats = getStatsObject(beanMsd.getObjectName(), beanMsd.
			getStatDescriptor(), false); // pass true if you wannt data from individual beans
        
        // rechercher la RT de la méthode avg 
        TimeStatisticImpl rt = (TimeStatisticImpl)stats.getStatistic
			(EJBStatsImpl.METHOD_RT);
        System.out.println("rt is " + rt.getMean());

        try {
            java.lang.Thread.sleep(5000);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        // obtenir Stats à nouveau
        Stats stats2 = getStatsObject(beanMsd.getObjectName(), beanMsd.
			getStatDescriptor(), false); // pass true if you wannt data from individual beans
        
        // rechercher la RT de la méthode avg
        TimeStatisticImpl rt2 = (TimeStatisticImpl)stats2.getStatistic
			(EJBStatsImpl.METHOD_RT);
        System.out.println("rt2 is " + rt2.getMean());

        // calculer la différence entre cette heure et la dernière heure.
        TimeStatisticImpl deltaRt = (TimeStatisticImpl)rt2.delta(rt);
        System.out.println("deltaRt is " + rt.getMean());

    }

    /**
     * Exemple de code pour montrer comment appeler StatisticProvider MBean 
			directement.
     * @deprecated Use 6.0 APIs.
     */
    public void testJSR77Stats() {
        // rechercher d'abord MBean ObjectName souhaité.
        // Consulter la méthode getObjectNames pour le code d'échantillon.

        // supposons que nous voulions appeler getStats sur JVM MBean pour obtenir des statistiques
        try {

            com.ibm.websphere.management.statistics.JVMStats stats = 
                    (com.ibm.websphere.management.statistics.JVMStats)ac.
				invoke(jvmOName, "getStats", null, null);
            
            System.out.println("\n get data from JVM MBean");
            
            if (stats == null) {
                System.out.println("WARNING: getStats on JVM MBean returns null");
            } else {

                // établir d'abord un lien avec les informations statiques si vous le souhaitez
                ((Stats)stats).setConfig(PmiClient.findConfig(configs, jvmOName));

                // imprimer toutes les données souhaitées
                //System.out.println(stats.toString());

                // naviguer et obtenir les données de l'objet stats
                processStats((Stats)stats);

                // appeler les méthodes JSR77 sur JVMStats pour obtenir les données correspondantes
                com.ibm.websphere.management.statistics.CountStatistic upTime = 
						stats.getUpTime();
                com.ibm.websphere.management.statistics.BoundedRangeStatistic 
						heapSize = stats.getHeapSize();

                if (upTime != null)
                    System.out.println("\nJVM up time is " + upTime.getCount());
                if (heapSize != null)
                    System.out.println("\nheapSize is " + heapSize.getCurrent());
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            new AdminException(ex).printStackTrace();
        }
    }


    /**
     Obtenir PmiModuleConfig du serveur
     */   
    public PmiModuleConfig getStatsConfig (String statsType)
    {
       try
       {       
            return (PmiModuleConfig)ac.invoke(perfOName, "getConfig", 
                                                new String[]{statsType}, 
                                                new String[]{"java.lang.String"});
       }
       catch(Exception e)
       {
            e.printStackTrace();
            return null;
       }
    }
    
    /** 
     * Obtenir PmiModuleConfig basé sur MBean ObjectName
      @deprecated Use com.ibm.websphere.pmi.client.PmiClient.findConfig()
     */
    public PmiModuleConfig findConfig(ObjectName on) {
        if (on == null) return null;
        
        String type = on.getKeyProperty("type");
        System.out.println("findConfig: mbean type =" + type);
        
        for (int i=0; i<configs.length ; i++) {

            if (configs[i].getMbeanType().equals(type))
                return configs[i];
        }
        System.out.println("Error: cannot find the config");
        return null;
        
    }

    /**
     * Obtenir PmiModuleConfig basé sur le nom du module PMI 
     @deprecated Use com.ibm.websphere.pmi.client.PmiClient.findConfig()
     */
    public PmiModuleConfig findConfig(String moduleName) {
        if (moduleName == null) return null;

        for (int i=0; i<configs.length ; i++) {

            if (configs[i].getShortName().equals(moduleName))
                return configs[i];
        }
        System.out.println("Error: cannot find the config");
        return null;
        
    }
}

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tprf_pmi
Nom du fichier : tprf_pmi.html