Desarrollo de sus propias aplicaciones de supervisión

Puede utilizar las interfaces de la Infraestructura de supervisión del rendimiento (PMI) para desarrollar sus propias aplicaciones para recopilar y mostrar información del rendimiento.

Acerca de esta tarea

Hay tres interfaces de este tipo: Java™ Machine Extension (JMX), cliente PMI y servlet. Las tres interfaces devuelven los mismos datos subyacentes.

[AIX Solaris HP-UX Linux Windows]Se puede acceder a la interfaz JMX a través del cliente de administración de WebSphere Application Server como se describe en el apartado Utilización de la interfaz JMX para desarrollar su propia aplicación de supervisión. La interfaz cliente PMI es una interfaz Java que funciona con la versión 3.5.5 y posteriores. La interfaz de servlets es quizá la más sencilla, que requiere una programación mínima, dado que la salida es XML.
Deprecated feature Deprecated feature: La interfaz de cliente PMI está en desuso en Versión 9.0. La interfaz JMX es el método recomendado para recopilar datos de PMI.depfeat

[z/OS]Se puede acceder a la interfaz de JMX mediante la herramienta AdminClient tal como se describe en el apartado Utilización de la interfaz JMX para desarrollar su propia aplicación de supervisión. La interfaz cliente PMI es una interfaz Java. La interfaz de servlets es quizá la más sencilla, que requiere una programación mínima, dado que la salida es XML.

Procedimiento

  1. Uso del cliente PMI para desarrollar la aplicación de supervisión (abandonado).
  2. Recuperación de los datos de rendimiento con PerfServlet
  3. Compilación de aplicaciones de supervisión
  4. Ejecución de sus nuevas aplicaciones de supervisión
  5. Utilización de la interfaz JMX para desarrollar su propia aplicación de supervisión.
  6. Desarrollo de interfaces PMI (versión 4.0) (está en desuso).

Ejemplo

Este ejemplo proporciona código utilizando directamente la API JMZ (Java Management Extension). Si desea obtener más información sobre la compilación de código fuente, consulte "Compilación de las aplicaciones de supervisión".

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.*;

/**
 * Código de ejemplo utilizando la API AdminClient para obtener datos PMI de
PerfMBean
 * y MBeans individuales.
 * 
 * @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;

    /**
     *  Crear un objeto de prueba (test) nuevo
     *  (hace falta un constructor por omisión para la estructura de prueba)
     */
    public PmiJmxTest() 
    {
    }

    /**
     * @param args[0] host
     * @param args[1] port, opcional, valor predeterminado 8880
     * @param args[2] connectorType, opcional, por omisión es el conector SOAP
     *   
     */
    public static void main(String[] args) 
    {
        PmiJmxTest instance = new PmiJmxTest();

        // analizar argumentos y crear el objeto AdminClient
        instance.init(args);

        // navegar por todos los MBean ObjectNames y poner en memoria caché los que interesen
        instance.getObjectNames();

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

            // establecer nivel, obtener datos, visualizar datos
            instance.doTest();

            // probar los datos EJB
            instance.testEJB();

            // cómo utilizar SR77 getStats para un MBean individual distinto de PerfMBean
            instance.testJSR77Stats();
        }            

    }

    /**
     * analizar args y 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);

            //--------------------------------------------------------------------
            // Obtener el objeto ac para el AppServer
            //---------------------------------------------------------------------
            System.out.println("main: create the adminclient");
            ac = getAdminClient(host, port, connector);

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

    /**
     * obtener AdminClient mediante el host, puerto y conector dados
     */
    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);

        /* establecer las siguientes propiedades si la seguridad está
habilitada y se utiliza 
						el conector SOAP */
        /* A continuación se muestra cómo establecer las propiedades del conector
SOAP cuando 
						la seguridad está habilitada.
           Consulte el javadoc de AdminClient para obtener más información.
    	   	   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;
    }


    /**
     * obtener todos los ObjectNames.
     */
    public void getObjectNames() {

        try {

            //--------------------------------------------------------------------
            // Obtener una lista de nombres de objetos
            //--------------------------------------------------------------------
            javax.management.ObjectName on = new javax.management.ObjectName("WebSphere:*");

            //---------------------------------------------------------------------
            // obtener todos los objectnames de este servidor
            //--------------------------------------------------------------------
           Set objectNameSet= ac.queryNames(on, null);

            //--------------------------------------------------------------------
            // Obtener los nombres de objetos deseados: Perf, Server, JVM, WLM (solo en ND)
            //--------------------------------------------------------------------
            if(objectNameSet != null) {
                Iterator i = objectNameSet.iterator();
                while (i.hasNext()) {
                    on = (ObjectName)i.next();
                    String type = on.getKeyProperty("type");

                    // descomentar si desea imprimir el nombre de objeto de cada MBean
                    // System.out.println("\n\n" + on.toString());

                    // buscar los MBeans que interesan
                    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 se han encontrado nombres de objeto");
                System.exit(2);
            }

            // Debe tener Perf MBean para obtener los datos 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();
        }

    }

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

        // los siguientes métodos son específicos de V6 y muestran las API V6. Establezca el distintivo en false
        String v5PropFlag = System.setProperty ("websphereV5Statistics", "false");
        try
        {        
            Object[] params;
            String[] signature;
    
            // obtener el conjunto de estadísticas actual que se utiliza en la
supervisión
            System.out.println ("\nCurrent statistic set: " + ac.invoke(perfOName,  "getStatisticSet", null, null));
    

            // obtener todas las estadísticas del servidor utilizando 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());


            // obtener estadísticas de un JVM MBean utilizando 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());


            // obtener estadísticas de una agrupación de hebras específica -- agrupación de hebras de contenedor Web
            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());


            // establecer la supervisión en el conjunto de estadísticas "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);   
            
            // obtener el conjunto de estadísticas actual que se utiliza en la
supervisión
            System.out.println ("\nCurrent statistic set: "+ ac.invoke(perfOName, "getStatisticSet", null, null));

            
            // habilitar de forma selectiva las estadísticas de todas las
agrupaciones de hebras
            System.out.println ("\nSelectively enable statistics (ActiveCount and PoolSize statistics) 
					 					 for thread pool -- fine grained control");

            StatDescriptor threadPoolSD = new StatDescriptor (new String[]
						{WSThreadPoolStats.NAME});    
                // crear un objeto spec para habilitar ActiveCount y PoolSize en la agrupación de hebras
            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);


            // obtener el conjunto de estadísticas actual que se utiliza en la
supervisión
            System.out.println ("\nCurrent statistic set: "+ ac.invoke(perfOName, "getStatisticSet", null, null));

            // obtener estadísticas de todas las agrupaciones de hebras
            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();                                            
        }

        // establecer la propiedad a su valor original
        System.setProperty ("websphereV5Statistics", v5PropFlag);
    }
        
    /**
     * Código de ejemplo para establecer nivel, obtener datos y visualizar datos. (V5)
     * @deprecated Utilizar las API 6.0.
     */
    public void doTest() 
    {
        try 
        {
            // primero obtener todas los configs  - utilizadas para establecer información estática para Stats 
            // Nota: el servidor sólo devuelve información del valor y hora. 
            //       No se devuelve una descripción, unidad, etc, con los datos PMI para reducir el coste de las comunicaciones.
            // Tieene que llamar a setConfig para enlazar luego la información estática y los datos
            configs = (PmiModuleConfig[])ac.invoke(perfOName, "getConfigs", null, null);

            // imprimir todos los módulos PMI y los tipos de mbean coincidentes
            for (int i=0; i<configs.length; i++)
                System.out.println("config: moduleName=" + configs[i].getShortName() + 
														", mbeanType=" + configs[i].getMbeanType());

            // establecer el nivel de instrumentación para el servidor
            setInstrumentationLevel(serverOName, null,  PmiConstants.LEVEL_HIGH);

            // ejemplo para utilizar StatDescriptor.
            // Tenga en cuenta que el módulo WLM sólo está disponible en ND
            StatDescriptor sd = new StatDescriptor(new String[] {"wlmModule.server"});
            setInstrumentationLevel(wlmOName, sd,  PmiConstants.LEVEL_HIGH);

            // ejemplo para InstrumentationLevel
            MBeanLevelSpec[] mlss = getInstrumentationLevel(wlmOName, sd, true);
            // puede llamar a getLevel(), getObjectName(), getStatDescriptor() en mlss[i]

            // obtener datos para el servidor
            Stats stats = getStatsObject(serverOName, true);
            System.out.println(stats.toString());

            // obtener para el submódulo del servidor WLM
            stats = getStatsObject(wlmOName, sd, true);
            if (stats == null)
                System.out.println("Cannot get Stats for WLM data");
            else
                System.out.println(stats.toString());
            
            // obtener datos para JVM MBean
            stats = getStatsObject(jvmOName, true);
            processStats(stats);

            // obtener datos para varios 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);
            // puede llamar a toString o processStats en 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();
        }
    }


    /**
     * Código de ejemplo para obtener nivel
     */
    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;
        }
    }

    /**
     * Código de ejemplo para obtener nivel
     */
    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;
        }
    }

    /**
     * Código de ejemplo para establecer nivel
     * @deprecated Utilizar las API 6.0.
     */
    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");
        }
    }

    /**
     * Código de ejemplo para obtener un objeto Stats
     * @deprecated Utilizar las API 6.0.
     */
    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;

            
            // buscar PmiModuleConfig y enlazarlo con los datos
            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;
        }
    }

    /**
     * Código de ejemplo para obtener un objeto 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);
            
            
            // buscar PmiModuleConfig y enlazarlo con los datos
            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;
        }
    }

    /**
     * Código de ejemplo para navegar y visualizar el valor de los datos del objeto Stats.
     */
    private void processStats(Stats stat) {
        processStats(stat, "");
    }

    /**
     * Código de ejemplo para navegar y obtener el valor de los datos del objeto Stats 
						y Statistic.
     * @deprecated Utilizar las API 6.0.
     */
    private void processStats(Stats stat, String indent) {
        if(stat == null)  return;

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

        // obtener el nombre de Stats
        String name = stat.getName();
        System.out.println(indent + "stats name=" + name);

        // listar nombres de datos
        String[] dataNames = stat.getStatisticNames();
        for (int i=0; i<dataNames.length; i++)
            System.out.println(indent + "    " + "data name=" +  dataNames[i]);
        System.out.println("");

        // listar todos los datos
        //com.ibm.websphere.management.statistics.Statistic[] allData = 
						stat.getStatistics();

        // lanzarlo para que sea el tipo Statistic de PMI y se puedan obtener más
        // También mostrar cómo se hace la conversión.
        //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 modo recursivo para sub-stats
        Stats[] substats = (Stats[])stat.getSubStats();
        if(substats == null || substats.length == 0)
            return;
        for(int i=0; i<substats.length; i++) {
            processStats(substats[i], indent + "    ");
        }
    }

    /**
     * El objeto Stats que ha devuelto el servidor no tiene información de configuración estática. 
				Tiene que establecerlo en el extremo del cliente.      */
    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());
            }
        }
    }

    /**
     * Código de ejemplo que muestra cómo obtener un MBeanStatDescriptor específico
     * @deprecated Utilizar las API 6.0.
     */
    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;
        }

    }

    /** 
     * Código de ejemplo que muestra cómo navegar por MBeanStatDescriptor mediante 
				listStatMembers 
     * @deprecated Utilizar las API 6.0.
     */
    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;
        }

    }


    /**
     * Código de ejemplo para obtener MBeanStatDescriptors
     * @deprecated Utilizar las API 6.0.
     */
    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]);
                // puede llamar de forma recursiva a listStatMembers hasta que encuentre el deseado
            }
            return msds;
        }
        catch(Exception e){
            new AdminException(e).printStackTrace();
            System.out.println("listStatMembers: Exception Thrown");
            return null;
        }

    }

    /** 
     * Código de ejemplo para obtener datos PMI de beanModule
     * @deprecated Utilizar las API 6.0.
     */
    public void testEJB() {

        // Este es el MBeanStatDescriptor para Enterprise EJB
        MBeanStatDescriptor beanMsd = getStatDescriptor(serverOName, 
										PmiConstants.BEAN_MODULE);
        if (beanMsd == null)
            System.out.println("Error: cannot find beanModule");
        
        // obtener Stats para nivel de módulo sólo porque recursive es igual a false
        Stats stats = getStatsObject(beanMsd.getObjectName(), beanMsd.
						getStatDescriptor(), false); // pasar true si desea datos de beans individuales
        
        // buscar el método avg RT 
        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();
        }

        // volver a obtener Stats
        Stats stats2 = getStatsObject(beanMsd.getObjectName(), beanMsd.
						getStatDescriptor(), false); // pasar true si desea datos de beans individuales
        
        // buscar el método avg RT 
        TimeStatisticImpl rt2 = (TimeStatisticImpl)stats2.getStatistic
						 (EJBStatsImpl.METHOD_RT);
        System.out.println("rt2 is " + rt2.getMean());

        // calcular la diferencia entre esta hora y la última hora.
        TimeStatisticImpl deltaRt = (TimeStatisticImpl)rt2.delta(rt);
        System.out.println("deltaRt is " + rt.getMean());

    }

    /**
     * Código de ejemplo que muestra cómo llamar a getStats directamente en
StatisticProvider MBean			.
     * @deprecated Utilizar las API 6.0.
     */
    public void testJSR77Stats() {
        // primero, buscar el MBean ObjectName que le interesa.
        // Consulte en el método getObjectNames el código de ejemplo.

        // presupone que desea llamar a getStats en JVM MBean para obtener Statistics
        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 { 

                // primero, enlazar con información estática si lo desea
                ((Stats)stats).setConfig(PmiClient.findConfig(configs, jvmOName));

                // imprimir todos los datos si lo desea
                //System.out.println(stats.toString());

                // navegar y obtener los datos del objeto stats
                processStats((Stats)stats);

                // llamar a los métodos JSR77 en JVMStats para obtener los datos relacionados
                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();
        }
    }


    /**
     Obtener PmiModuleConfig del servidor
     */   
    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;
       }
    }
    
    /** 
     * Obtener PmiModuleConfig basándose en MBean ObjectName
      @deprecated Utilizar 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;
        
    }

    /**
     * Obtener PmiModuleConfig basándose en el nombre de módulo PMI 
     @deprecated Utilizar 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;
        
    }
}

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tprf_pmi
File name: tprf_pmi.html