Eigene Überwachungsanwendungen entwickeln

Mit den PMI-Schnittstellen (Performance Monitoring Infrastructure) können Sie eigene Anwendungen für die Erfassung und Anzeige von Durchsatzdaten entwickeln.

Informationen zu diesem Vorgang

Es gibt drei PMI-Schnittstellen: Eine JMX-basierte Schnittstelle (Java Machine Extension), eine PMI-Clientschnittstelle und eine Servletschnittstelle. Alle drei geben dieselben zugrunde liegenden Daten zurück.

[AIX Solaris HP-UX Linux Windows]Auf die JMX-Schnittstelle können Sie mit dem Verwaltungsclient von WebSphere Application Server zugreifen. Informationen hierzu finden Sie im Artikel Mit der JMX-Schnittstelle eigene Überwachungsanwendungen entwickeln. Die PMI-Clientschnittstelle ist eine Java-Schnittstelle, die ab Version 3.5.5 verwendet werden kann. Die Servletschnittstelle ist vielleicht am einfachsten, denn sie erfordert nur eine minimale Programmierung, da die Ausgabe in XML erfolgt.
Veraltetes Feature Veraltetes Feature: Die PMI-Clientschnittstelle ist ab Version 9.0 veraltet. Für die Erfassung von PMI-Daten wird die Verwendung der JMX-Schnittstelle empfohlen.depfeat

[z/OS]Auf die JMX-Schnittstelle können Sie mit dem Tool AdminClient zugreifen. Informationen hierzu finden Sie im Artikel Mit der JMX-Schnittstelle eigene Überwachungsanwendungen entwickeln. Die PMI-Clientschnittstelle ist eine Java-Schnittstelle. Die Servletschnittstelle ist vielleicht am einfachsten, denn sie erfordert nur eine minimale Programmierung, da die Ausgabe in XML erfolgt.

Vorgehensweise

  1. Mit dem PMI-Client eigene Überwachungsanwendungen entwickeln (veraltet).
  2. Leistungsdaten mit PerfServlet abrufen
  3. Überwachungsanwendungen kompilieren
  4. Neue Überwachungsanwendungen ausführen
  5. Mit der JMX-Schnittstelle eigene Überwachungsanwendungen entwickeln.
  6. PMI-Schnittstellen entwickeln (Version 4.0) (veraltet).

Beispiel

Dieses Beispiel enthält Code, in dem die JMX-API (Java™ Management Extension) direkt verwendet wird. Informationen zum Kompilieren Ihres Quellcodes finden Sie unter "Überwachungsanwendungen kompilieren".

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

/**
 * Beispielcode, der die API AdminClient verwendet, um PMI-Daten von
 * PerfMBean und einzelnen MBeans abzurufen.
 *   * 
 * @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;

    /**
     *  Erstellt ein neues Testobjekt
     *  (Standardkonstruktor für das Testframework erforderlich)
     */
    public PmiJmxTest() 
    {
    }

    /**
     * @param args[0]: Host
     * @param args[1] Port, optional, Standardwert ist 8880
     * @param args[2] connectorType, optional, Standardwert ist der Connectortyp SOAP
     *   
     */
    public static void main(String[] args)
    {
        PmiJmxTest instance = new PmiJmxTest();

        // Argumente parsen und AdminClient-Objekt erstellen
        instance.init(args);

        // Zu allen MBean-ObjectNames navigieren und gewünschte zwischenspeichern
        instance.getObjectNames();

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

            // Stufe festlegen, Daten abrufen, Daten anzeigen
            instance.doTest();

            // EJB-Daten testen
            instance.testEJB();

            // Verwendung der JSR77-Methode getStats für einzelne MBean außer PerfMBean
            instance.testJSR77Stats();
        }            

    }

    /**
     * Argumente parsen und getAdminClient ausführen
     */
    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);

            //--------------------------------------------------------------------
            // ac-Objekt für den AppServer abrufen
            //---------------------------------------------------------------------
            System.out.println("main: create the adminclient");
            ac = getAdminClient(host, port, connector);

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

    /**
     * AdminClient mit angegebenen Host-, Port- und Connectorwerten abrufen
     */
    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);

        /* Definieren Sie die folgenden Eigenschaften, wenn die Sicherheit aktiviert ist
        /* und der SOAP-Connector verwendet wird.
				         /* Der folgende Code zeigt, wie Eigenschaften für den SOAP-Connector definiert
        /* werden, wenn die Sicherheit aktiviert ist.
           /* Nähere Informationen finden Sie in der Javadoc zu AdminClient.
    	   			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: Ausnahme");
        }
        return ac;
    }


    /**
     * Alle ObjectNames abrufen.
     */
    public void getObjectNames() {

        try  {    

            //--------------------------------------------------------------------
            // Liste der Objektnamen abrufen
            //--------------------------------------------------------------------
            javax.management.ObjectName on = new javax.management.ObjectName("WebSphere:*");

            //---------------------------------------------------------------------
            // Alle Objektnamen für diesen Server abrufen
            //--------------------------------------------------------------------
           Set objectNameSet= ac.queryNames(on, null);

            //--------------------------------------------------------------------
            // Objektnamen abrufen, an denen Sie interessiert sind: Perf, Server, JVM, WLM (nur in ND anwendbar)
            //--------------------------------------------------------------------
            if(objectNameSet != null) {
                Iterator i = objectNameSet.iterator();
                                while (i.hasNext()) {
                                        on = (ObjectName)i.next();
                    String type = on.getKeyProperty("type");

                    // Kommentarzeichen entfernen, wenn der Objektname für jede MBean ausgegeben werden soll
                    // System.out.println("\n\n" + on.toString());

                    // Gewünschte MBeans suchen
                    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);
            }

            // Perf-MBean zum Abrufen von PMI-Daten erforderlich.
            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();
        }

    }

    /** APIs der Version 6 testen */
    public void doTestV6 ()
    {
        System.out.println ("\ndoTestV6() output:\n");

        // Die folgenden Methoden sind speziell für Version 6 bestimmt und
        // veranschaulichen die API der Version 6...also Flag auf false setzen
        String v5PropFlag = System.setProperty ("websphereV5Statistics", "false");
        try 
        {        
            Object[] params;
            String[] signature;
    
            // Aktuellen Statistiksatz abrufen, der für die Überwachung verwendet wird.
            System.out.println ("\nCurrent statistic set: " + ac.invoke(perfOName, "getStatisticSet", null, null));
    

            // Alle Statistiken vom Server mit Perf-MBean abrufen.
            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());


            // Statistiken von einer einzigen JVM-MBean mit J2EE JMX abrufen.
            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());


            // Statistiken aus einem bestimmten Thread-Pool abrufen -- 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());


            // Überwachung auf Statistiksatz "extended" (erweitert) setzen.
            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);

                        
            // Aktuellen Statistiksatz abrufen, der für die Überwachung verwendet wird.
            System.out.println ("\nCurrent statistic set: "+ ac.invoke(perfOName, "getStatisticSet", null, null));

            
            // Statistiken selektiv für alle Thread-Pools aktivieren
            System.out.println ("\nSelectively enable statistics (ActiveCount and PoolSize statistics)
					 					 for thread pool -- fine grained control");

            StatDescriptor threadPoolSD = new StatDescriptor (new String[]
						{WSThreadPoolStats.NAME});    
                // spec-Objekt zum Aktivieren von ActiveCount und PoolSize im Thread-Pool erstellen
            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);


            // Aktuellen Statistiksatz abrufen, der für die Überwachung verwendet wird.
            System.out.println ("\nCurrent statistic set: "+ ac.invoke(perfOName, "getStatisticSet", null, null));

            // Statistiken aus allen Thread-Pools abrufen
            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();
        }

        // Eigenschaft auf ursprünglichen Wert setzen
        System.setProperty ("websphereV5Statistics", v5PropFlag);
    }
        
    /**
     * Beispielcode zum Festlegen der Stufe, zum Abrufen und zum Anzeigen der Daten (V5)
     * @deprecated APIs der Version 6.0 verwenden.
     */
    public void doTest() 
    {
        try 
        {
            // Zuerst alle Konfigurationen abrufen, werden verwendet, um Statistikinfos für Stats festzulegen
            // Anmerkung: Server gibt nur den Wert und die Zeit zurück.
            //            Beschreibung, Einheit usw. werdne aus Kostengründen nicht mit den PMI-Daten zurückgegeben.
            //            Sie müssen setConfig aufrufen, um die statischen Informationen und Stats-Daten später zu binden.
            configs = (PmiModuleConfig[])ac.invoke(perfOName, "getConfigs", null, null);

            // Alle PMI-Module und zugehörigen MBean-Typen ausgeben
            for (int i=0; i<configs.length; i++)
                System.out.println("config: moduleName=" + configs[i].getShortName() + 
														", mbeanType=" + configs[i].getMbeanType());

            // Die Instrumentierungsebene für den Server festlegen
            setInstrumentationLevel(serverOName, null, PmiConstants.LEVEL_HIGH);

            // Beispiel für die Verwendung von StatDescriptor.
            // Das WLM-Modul ist nur in ND verfügbar.
            StatDescriptor sd = new StatDescriptor(new String[] {"wlmModule.server"});
            setInstrumentationLevel(wlmOName, sd, PmiConstants.LEVEL_HIGH);

            // Beispiel für getInstrumentationLevel
            MBeanLevelSpec[] mlss = getInstrumentationLevel(wlmOName, sd, true);
            // Sie können getLevel(), getObjectName(), getStatDescriptor() für mlss[i] aufrufen.

            // Daten für den Server abrufen
            Stats stats = getStatsObject(serverOName, true);
            System.out.println(stats.toString());

            // Daten für WLM-Serversubmodul abrufen
            stats = getStatsObject(wlmOName, sd, true);
            if (stats == null)
                System.out.println("Cannot get Stats for WLM data");
            else
                System.out.println(stats.toString());
            
            // Daten für JVM-MBean abrufen
            stats = getStatsObject(jvmOName, true);
            processStats(stats);

            // Daten für mehrere MBeans abrufen
            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);

              // Sie können toString oder processStats für statsArray[i] aufrufen

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


    /**
     * Beispielcode für Abruf der Stufe
     */
    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;
        }
    }

    /**
     * Beispielcode für Abruf der Stufe
     */
    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;
        }
    }

    /**
     * Beispielcode für Festlegen der Stufe
     * @deprecated APIs der Version 6.0 verwenden.
     */
    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");
        }
    }

    /**
     * Beispielcode zum Abrufen eines Stats-Objekts
     * @deprecated APIs der Version 6.0 verwenden.
     */
    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;

            
            // PmiModuleConfig suchen und an die Daten binden
            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;
        }
    }

    /**
     * Beispielcode zum Abrufen eines Stats-Objekts
     */
    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);


                        
            
            // PmiModuleConfig suchen und an die Daten binden
            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;
        }
    }

    /**
     * Beispielcode zum Navigieren und Abrufen des Datenwerts des Stats-Objekts.
     */
    private void processStats(Stats stat) {
        processStats(stat, "");
    }

    /**
     * Beispielcode zum Navigieren und Abrufen des Datenwerts des Stats-
     * und Statistic-Objekts.
     * @deprecated APIs der Version 6.0 verwenden.
     */
    private void processStats(Stats stat, String indent) {
        if(stat == null)  return;

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

        // Name des Stats-Objekts abrufen
        String name = stat.getName();
        System.out.println(indent + "stats name=" + name);

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

        // Alle Daten auflisten
        //com.ibm.websphere.management.statistics.Statistic[] allData =
						stat.getStatistics();

        // In PMI-Typ "Statistic" ändern, damit mehr Daten abgerufen werden können
        // Auch zeigen, wie die Übersetzung durchgeführt wird.
        //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());
                }
            }
        }

        // Rekursives Abrufen von 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 + "    ");
        }
    }

    /**
     * Das vom Server zurückgegebene Stats-Objekt enthält keine statischen Konfigurationsdaten.
				     Sie müssen sie auf Clientseite festlegen.     */
    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());
            }
        }
    }

    /**
     * Beispielcode für das Abrufen eines bestimmten MBeanStatDescriptor
     * @deprecated APIs der Version 6.0 verwenden.
     */
    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;
        }

    }

    /** 
     * Beispielcode für die Navigation in MBeanStatDescriptor über
				listStatMembers 
     * @deprecated APIs der Version 6.0 verwenden.
     */
    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;
        }

    }


    /**
     * Beispielcode für das Abrufen von MBeanStatDescriptors
     * @deprecated APIs der Version 6.0 verwenden.
     */
    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]);
                // Sie können listStatMembers rekursiv aurufen, bis der gewünschte Wert gefunden wird
            }
            return msds;
        }
        catch(Exception e) {
            new AdminException(e).printStackTrace();
            System.out.println("listStatMembers: Exception Thrown");
            return null;
        }

    }

    /** 
     * Beispielcode zum Abrufen von PMI-Daten vom beanModule
     * @deprecated APIs der Version 6.0 verwenden.
     */
    public void testEJB() {

        // MBeanStatDescriptor für Enterprise EJB
        MBeanStatDescriptor beanMsd = getStatDescriptor(serverOName, 
										PmiConstants.BEAN_MODULE);
        if (beanMsd == null)
            System.out.println("Error: cannot find beanModule");
        
        // Stats nur für Modulebene abrufen, da rekursiver Abruf fehlgeschlagen ist
        Stats stats = getStatsObject(beanMsd.getObjectName(), beanMsd.
						getStatDescriptor(), false); // pass true if you wannt data from individual beans
        
        // avg-Methode RT suchen
        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();
        }

        // Stats erneut abrufen
        Stats stats2 = getStatsObject(beanMsd.getObjectName(), beanMsd.
						getStatDescriptor(), false); // pass true if you wannt data from individual beans
        
        // avg-Methode RT suchen
        TimeStatisticImpl rt2 = (TimeStatisticImpl)stats2.getStatistic
						(EJBStatsImpl.METHOD_RT);
        System.out.println("rt2 is " + rt2.getMean());

        // Differenz zwischen dieser Zeit und letzter Zeit berechnen
        TimeStatisticImpl deltaRt = (TimeStatisticImpl)rt2.delta(rt);
        System.out.println("deltaRt is " + rt.getMean());

    }

    /**
     * Beispielcode, der veranschaulicht, wie getStats für die MBean StatisticProvider direkt aufgerufen wird.
     * @deprecated APIs der Version 6.0 verwenden.
     */
    public void testJSR77Stats() {
        // Zuerst den gewünschten MBean-ObjectName suchen.
        // Beispielcode finden Sie unter der Methode getObjectNames.

        // Angenommen, Sie möchten getStats in der JVM-MBean aufrufen, um Statistiken abzurufen
        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 {

                // Zuerst Link zur statischen Informationen herstellen, sofern gewünscht
                ((Stats)stats).setConfig(PmiClient.findConfig(configs, jvmOName));

                // Alle Daten ausgeben, sofern gewünscht
                //System.out.println(stats.toString());

                // Navigieren und Daten im stats-Objekt abrufen
                processStats((Stats)stats);

                // JSR77-Methoden in JVMStats aufrufen, um zugehörige Daten abzurufen
                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();
        }
    }


    /**
     PmiModuleConfig vom Server abrufen
     */   
    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;
       }
    }
    
    /** 
     * PmiModuleConfig basieren auf ObjectName der MBean abrufen
      @deprecated com.ibm.websphere.pmi.client.PmiClient.findConfig() verwenden
     */
    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;
        
    }

    /**
     * PmiModuleConfig basierend auf PMI-Modulnamen abrufen
     @deprecated com.ibm.websphere.pmi.client.PmiClient.findConfig() verwenden
     */
    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;
        
    }
}

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tprf_pmi
Dateiname:tprf_pmi.html