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]](../images/dist.gif)

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
- Mit dem PMI-Client eigene Überwachungsanwendungen entwickeln (veraltet).
- Leistungsdaten mit PerfServlet abrufen
- Überwachungsanwendungen kompilieren
- Neue Überwachungsanwendungen ausführen
- Mit der JMX-Schnittstelle eigene Überwachungsanwendungen entwickeln.
- 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;
}
}