Développement de vos propres applications de supervision
Vous pouvez utiliser les interfaces PMI (Performance Monitoring Infrastructure) pour développer vos propres applications afin de collecter de d'afficher des informations relatives aux performances.
Pourquoi et quand exécuter cette tâche
Les trois interfaces suivantes sont disponibles : interface JMX (Java™ Machine Extension), interface client PMI et interface de servlet. Toutes les trois renvoient les mêmes données sous-jacentes.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)

L'interface JMX est accessible via l'outil AdminClient comme le décrit la rubrique Développement d'une application de surveillance personnalisée à l'aide de l'interface JMX. L'interface de client PMI est une interface Java. L'interface de servlet est peut-être la plus simple, nécessitant une programmation minimale, dans la mesure où la sortie est au format XML.
Procédure
- Développement de l'application de surveillance à l'aide du client PMI (déconseillé).
- Extraction des données de performance à l'aide de PerfServlet
- Compilation des applications de surveillance
- Exécution de vos nouvelles applications de supervision
- Développement d'une application de surveillance personnalisée à l'aide de l'interface JMX.
- Développement d'interfaces PMI (Version 4.0) (déconseillé).
Exemple
Cet exemple fournit un code utilisant directement l'API Java Management Extension (JMX). Pour des informations sur la compilation du code source, voir "Compilation des applications de surveillance".
package com.ibm.websphere.pmi;
import com.ibm.websphere.management.AdminClient;
import com.ibm.websphere.management.AdminClientFactory;
import com.ibm.websphere.management.exception.ConnectorException;
import com.ibm.websphere.management.exception.InvalidAdminClientTypeException;
import com.ibm.websphere.management.exception.*;
import java.util.*;
import javax.management.*;
import com.ibm.websphere.pmi.*;
import com.ibm.websphere.pmi.client.*;
import com.ibm.websphere.pmi.stat.*;
/**
* Exemple de code utilisant l'API AdminClient pour obtenir des données PMI à partir de PerfMBean
* et de MBeans individuels
*
* @ibm-api
*/
public class PmiJmxTest implements PmiConstants
{
private AdminClient ac = null;
private ObjectName perfOName = null;
private ObjectName serverOName = null;
private ObjectName wlmOName = null;
private ObjectName jvmOName = null;
private ObjectName orbtpOName = null;
private boolean failed = false;
private PmiModuleConfig[] configs = null;
/**
* Crée un objet de test
* (Constructeur par défaut nécessaire pour la structure de test)
*/
public PmiJmxTest()
{
}
/**
* @param args[0] host
* @param args[1] port, optional, default is 8880
* @param args[2] connectorType, optional, default is SOAP connector
*
*/
public static void main(String[] args)
{
PmiJmxTest instance = new PmiJmxTest();
// analyser les arguments et créer l'objet AdminClient
instance.init(args);
// parcourir tous les ObjectNames MBean et mettre en cache les noms pertinents
instance.getObjectNames();
boolean v6 = !(new Boolean(System.getProperty ("websphereV5Statistics"))).
booleanValue();
if( v6 )
{
// tester les API V6
instance.doTestV6();
}
else
{
// définir le niveau, obtenir des données, afficher des données
instance.doTest();
// tester les données EJB
instance.testEJB();
// comment utiliser la méthode getStats JSR77 pour MBean individuel autre que PerfMBean
instance.testJSR77Stats();
}
}
/**
* analyser les arguments et getAdminClient
*/
public void init(String[] args)
{
try
{
String host = null;
String port = "8880";
String connector = AdminClient.CONNECTOR_TYPE_SOAP;
if (args.length < 1) {
System.err.println("ERROR: Usage: PmiJmxTest <host> [<port>] [<connector>]");
System.exit(2);
}
else
{
host = args[0];
if (args.length > 1)
port = args[1];
if (args.length > 2)
connector = args[2];
}
if(host == null) {
host = "localhost";
}
if (port == null) {
port = "2809";
}
if (connector == null) {
connector = AdminClient.CONNECTOR_TYPE_SOAP;
}
System.out.println("host=" + host + " , port=" + port + ",connector=" + connector);
//--------------------------------------------------------------------
// Obtenir l'objet ac pour AppServer
//---------------------------------------------------------------------
System.out.println("main: create the adminclient");
ac = getAdminClient(host, port, connector);
}
catch (Exception ex)
{
failed = true;
new AdminException(ex).printStackTrace();
ex.printStackTrace();
}
}
/**
* obtenir AdminClient à l'aide de l'hôte, du port et du connecteur donnés
*/
public AdminClient getAdminClient(String hostStr, String portStr, String
connector) {
System.out.println("getAdminClient: host=" + hostStr + " , portStr=" + portStr);
AdminClient ac = null;
java.util.Properties props = new java.util.Properties();
props.put(AdminClient.CONNECTOR_TYPE, connector);
props.put(AdminClient.CONNECTOR_HOST, hostStr);
props.put(AdminClient.CONNECTOR_PORT, portStr);
/* définir les propriétés suivantes si la sécurité est activée et à l'aide du
connecteur SOAP */
/* L'exemple suivant montre définir des propriétés pour le connecteur SOAP
lorsque la sécurité est activée.
Voir la documentation Java AdminClient pour plus d'informations.
Properties props = new Properties();
props.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
props.setProperty(AdminClient.CONNECTOR_PORT, "8880");
props.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_
TYPE_SOAP);
props.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");
props.setProperty(AdminClient.USERNAME, "test2");
props.setProperty(AdminClient.PASSWORD, "user24test");
props.setProperty("javax.net.ssl.trustStore",
"C:/WebSphere/AppServer/etc/DummyClientTrustFile.jks");
props.setProperty("javax.net.ssl.keyStore",
"C:/WebSphere/AppServer/etc/DummyClientKeyFile.jks");
props.setProperty("javax.net.ssl.trustStorePassword", "WebAS");
props.setProperty("javax.net.ssl.keyStorePassword", "WebAS");
*/
try {
ac = AdminClientFactory.createAdminClient(props);
}
catch(Exception ex) {
failed = true;
new AdminException(ex).printStackTrace();
System.out.println("getAdminClient: exception");
}
return ac;
}
/**
* obtenir tous les noms d'objet ObjectName.
*/
public void getObjectNames() {
try {
//--------------------------------------------------------------------
// Obtenir une liste de noms d'objet
//--------------------------------------------------------------------
javax.management.ObjectName on = new javax.management.ObjectName("WebSphere:*");
//---------------------------------------------------------------------
// obtenir tous les noms d'objet pour ce serveur
//--------------------------------------------------------------------
Set objectNameSet= ac.queryNames(on, null);
//--------------------------------------------------------------------
// obtenir les noms d'objet souhaités : Perf, Server, JVM, WLM (applicable uniquement dans ND)
//--------------------------------------------------------------------
if(objectNameSet != null) {
Iterator i = objectNameSet.iterator ();
while (i.hasNext()) {
on = (ObjectName)i.next();
String type = on.getKeyProperty("type");
// supprimer la mise en commentaire si vous souhaitez imprimer ObjectName pour chaque MBean
// System.out.println("\n\n" + on.toString());
// rechercher les MBeans souhaités
if(type != null && type.equals("Perf")) {
System.out.println("\nMBean: perf =" + on.toString());
perfOName = on;
}
if(type != null && type.equals("Server")) {
System.out.println("\nMBean: Server =" + on.toString());
serverOName = on;
}
if(type != null && type.equals("JVM")) {
System.out.println("\nMBean: jvm =" + on.toString());
jvmOName = on;
}
if(type != null && type.equals("WLMAppServer")) {
System.out.println("\nmain: WLM =" + on.toString());
wlmOName = on;
}
if(type != null && type.equals("ThreadPool"))
{
String name = on.getKeyProperty("name");
if (name.equals("ORB.thread.pool"))
System.out.println("\nMBean: ORB ThreadPool =" + on.toString());
orbtpOName = on;
}
}
}
else {
System.err.println("main: ERROR: no object names found");
System.exit(2);
}
// Vous devez disposer de Perf MBean pour obtenir des données PMI.
if (perfOName == null)
{
System.err.println("main: cannot get PerfMBean. Make sure PMI is enabled");
System.exit(3);
}
}
catch (Exception ex)
{
failed = true;
new AdminException(ex).printStackTrace();
ex.printStackTrace();
}
}
/** Tester les API V6 */
public void doTestV6 ()
{
System.out.println ("\ndoTestV6() output:\n");
// les méthodes suivantes sont spécifiques de V6 et démontrent l'API V6, définissez donc l'indicateur à false
String v5PropFlag = System.setProperty ("websphereV5Statistics", "false");
try
{
Object[] params;
String[] signature;
// obtenir un ensemble de statistiques utilisé pour la surveillance
System.out.println ("\nCurrent statistic set: " + ac.invoke(perfOName, "getStatisticSet", null, null));
// obtenir toutes les statistiques du serveur à l'aide de Perf MBean
System.out.println ("\nGet all statistics in PMI tree");
signature = new String[]{"[Lcom.ibm.websphere.pmi.stat.StatDescriptor;","java.lang.Boolean"};
params = new Object[] {new StatDescriptor[]{new StatDescriptor(null)}, new Boolean(true)};
com.ibm.websphere.pmi.stat.WSStats[] wsStats = (com.ibm.websphere.pmi.stat.WSStats[])
ac.invoke(perfOName, "getStatsArray", params, signature);
System.out.println (wsStats[0].toString());
// obtenir des statistiques d'un JVM MBean à l'aide de J2EE JMX
System.out.println ("\nGet JVM statistics using JVM MBean");
javax.management.j2ee.statistics.Stats j2eeStats = (javax.management.j2ee.statistics.Stats)
ac.getAttribute(jvmOName, "stats");
System.out.println (j2eeStats.toString());
// obtenir des statistiques d'un pool d'unités d'exécution -- pool d'unités d'exécution WebContainer
System.out.println ("\nGet statistics for a specific thread pool");
signature = new String[]{"[Lcom.ibm.websphere.pmi.stat.StatDescriptor;","java.lang.Boolean"};
StatDescriptor webContainerPoolSD = new StatDescriptor (new String[] {WSThreadPoolStats.NAME,
"WebContainer"});
params = new Object[] {new StatDescriptor[]{webContainerPoolSD}, new Boolean(true)};
wsStats = (com.ibm.websphere.pmi.stat.WSStats[])
ac.invoke(perfOName, "getStatsArray", params, signature);
System.out.println (wsStats[0].toString());
// définir la surveillance à l'ensemble de statistiques "extended"
System.out.println ("\nSet monitoring to statistic set 'Extended'");
signature = new String[]{"java.lang.String"};
params = new Object[] {StatConstants.STATISTIC_SET_EXTENDED};
ac.invoke (perfOName, "setStatisticSet", params, signature);
// obtenir un ensemble de statistiques utilisé pour la surveillance
System.out.println ("\nCurrent statistic set: "+ ac.invoke(perfOName, "getStatisticSet", null, null));
// activer sélectivement des statistiques pour tous les pools d'unités d'exécution
System.out.println ("\nSelectively enable statistics (ActiveCount and PoolSize statistics)
for thread pool -- fine grained control");
StatDescriptor threadPoolSD = new StatDescriptor (new String[]
{WSThreadPoolStats.NAME});
// créer un objet spec pour active ActiveCount et PoolSize sur le pool d'unités d'exécution
StatLevelSpec[] spec = new StatLevelSpec[1];
spec[0] = new StatLevelSpec (threadPoolSD.getPath(), new int[]
{WSThreadPoolStats.ActiveCount, WSThreadPoolStats.PoolSize});
signature = new String[]{"[Lcom.ibm.websphere.pmi.stat.StatLevelSpec;","java.lang.Boolean"};
params = new Object[] {spec, new Boolean(true)};
ac.invoke(perfOName, "setInstrumentationLevel", params, signature);
// obtenir un ensemble de statistiques utilisé pour la surveillance
System.out.println ("\nCurrent statistic set: "+ ac.invoke(perfOName, "getStatisticSet", null, null));
// obtenir les statistiques de tous les pools d'unités d'exécution
System.out.println ("\nGet statistics from all thread pools");
signature = new String[]{"[Lcom.ibm.websphere.pmi.stat.StatDescriptor;","java.lang.Boolean"};
params = new Object[] {new StatDescriptor[]{threadPoolSD},new Boolean(true)};
wsStats = (com.ibm.websphere.pmi.stat.WSStats[])
ac.invoke(perfOName, "getStatsArray", params, signature);
System.out.println (wsStats[0].toString());
}
catch (Exception e)
{
e.printStackTrace();
}
// définir la propriété à la valeur d'origine
System.setProperty ("websphereV5Statistics", v5PropFlag);
}
/**
* Exemple de code pour définir le niveau, obtenir des données et les afficher. (V5)
* @deprecated Use 6.0 APIs.
*/
public void doTest()
{
try
{
// obtenez d'abord toutes les configs - permet de définir des informations statiques pour Stats
// Remarque : le serveur ne renvoie que les informations de valeur et d'heure.
// Aucune description, unité, etc n'est renvoyé avec des données PMI pour réduire le coût de communication.
// Vous devez appeler setConfig pour lier les informations statiques et les données Stats ultérieurement.
configs = (PmiModuleConfig[])ac.invoke(perfOName, "getConfigs", null, null);
// imprimer tous les modules PMI et les types mbean correspondants
for (int i=0; i<configs.length; i++)
System.out.println("config: moduleName=" + configs[i].getShortName() +
", mbeanType=" + configs[i].getMbeanType());
// définir le niveau d'instrumentation du serveur
setInstrumentationLevel(serverOName, null, PmiConstants.LEVEL_HIGH);
// exemple d'utilisation de StatDescriptor.
// Notez que le module WLM est uniquement disponible dans ND.
StatDescriptor sd = new StatDescriptor(new String[] {"wlmModule.server"});
setInstrumentationLevel(wlmOName, sd, PmiConstants.LEVEL_HIGH);
// exemple getInstrumentationLevel
MBeanLevelSpec[] mlss = getInstrumentationLevel(wlmOName, sd, true);
// vous pouvez appeler getLevel(), getObjectName(), getStatDescriptor() sur mlss[i]
// obtenir des données sur le serveur
Stats stats = getStatsObject(serverOName, true);
System.out.println(stats.toString());
// obtenir des données sur le sous-module de serveur WLM
stats = getStatsObject(wlmOName, sd, true);
if (stats == null)
System.out.println("Cannot get Stats for WLM data");
else
System.out.println(stats.toString());
// obtenir des données sur JVM MBean
stats = getStatsObject(jvmOName, true);
processStats(stats);
// obtenir des données pour plusieurs MBeans
ObjectName[] onames = new ObjectName[]{orbtpOName, jvmOName};
Object[] params = new Object[]{onames, new Boolean(true)};
String[] signature = new String[]{"[Ljavax.management.ObjectName;",
"java.lang.Boolean"};
Stats[] statsArray = (Stats[])ac.invoke(perfOName, "getStatsArray",
params, signature);
// vous pouvez appeler toString ou processStats sur statsArray[i]
if (!failed)
System.out.println("All tests passed");
else
System.out.println("Some tests failed");
}
catch (Exception ex)
{
new AdminException(ex).printStackTrace();
ex.printStackTrace();
}
}
/**
* Exemple de code pour le niveau d'extraction
*/
protected MBeanLevelSpec[] getInstrumentationLevel(ObjectName on, StatDescriptor sd, boolean recursive)
{
if (sd == null)
return getInstrumentationLevel(on, recursive);
System.out.println("\ntest getInstrumentationLevel\n");
try {
Object[] params = new Object[2];
params[0] = new MBeanStatDescriptor(on, sd);
params[1] = new Boolean(recursive);
String[] signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanStatDescriptor", "java.lang.Boolean"};
MBeanLevelSpec[] mlss = (MBeanLevelSpec[])ac.invoke(perfOName, "getInstrumentationLevel", params, signature);
return mlss;
}
catch(Exception e) {
new AdminException(e).printStackTrace();
System.out.println("getInstrumentationLevel: Exception Thrown");
return null;
}
}
/**
* Exemple de code pour le niveau d'extraction
*/
protected MBeanLevelSpec[] getInstrumentationLevel(ObjectName on,
boolean recursive) {
if (on == null)
return null;
System.out.println("\ntest getInstrumentationLevel\n");
try {
Object[] params = new Object[]{on, new Boolean(recursive)};
String[] signature= new String[]{ "javax.management.ObjectName",
"java.lang.Boolean"};
MBeanLevelSpec[] mlss = (MBeanLevelSpec[])ac.invoke(perfOName,
"getInstrumentationLevel", params, signature);
return mlss;
}
catch(Exception e) {
new AdminException(e).printStackTrace();
failed = true;
System.out.println("getInstrumentationLevel: Exception Thrown");
return null;
}
}
/**
* Exemple de code pour le niveau de définition
* @deprecated Use 6.0 APIs.
*/
protected void setInstrumentationLevel(ObjectName on, StatDescriptor sd,
int level) {
System.out.println("\ntest setInstrumentationLevel\n");
try {
Object[] params = new Object[2];
String[] signature = null;
MBeanLevelSpec[] mlss = null;
params[0] = new MBeanLevelSpec(on, sd, level);
params[1] = new Boolean(true);
signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanLevelSpec", "java.lang.Boolean"};
ac.invoke(perfOName, "setInstrumentationLevel", params, signature);
}
catch(Exception e) {
failed = true;
new AdminException(e).printStackTrace();
System.out.println("setInstrumentationLevel: FAILED: Exception Thrown");
}
}
/**
* Exemple de code pour extraire un objet Stats
* @deprecated Use 6.0 APIs.
*/
public Stats getStatsObject(ObjectName on, StatDescriptor sd, boolean
recursive) {
if (sd == null)
return getStatsObject(on, recursive);
System.out.println("\ntest getStatsObject\n");
try {
Object[] params = new Object[2];
params[0] = new MBeanStatDescriptor(on, sd); // construct MBeanStatDescriptor
params[1] = new Boolean(recursive);
String[] signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanStatDescriptor", "java.lang.Boolean"};
Stats stats = (Stats)ac.invoke(perfOName, "getStatsObject", params, signature);
if (stats == null) return null;
// rechercher PmiModuleConfig et liez-le à des données
String type = on.getKeyProperty("type");
if (type.equals(MBeanTypeList.SERVER_MBEAN))
setServerConfig(stats);
else
stats.setConfig(PmiClient.findConfig(configs, on));
return stats;
} catch(Exception e) {
failed = true;
new AdminException(e).printStackTrace();
System.out.println("getStatsObject: Exception Thrown");
return null;
}
}
/**
* Exemple de code pour extraire un objet Stats
*/
public Stats getStatsObject(ObjectName on, boolean recursive) {
if (on == null)
return null;
System.out.println("\ntest getStatsObject\n");
try {
Object[] params = new Object[]{on, new Boolean(recursive)};
String[] signature = new String[] { "javax.management.ObjectName",
"java.lang.Boolean"};
Stats stats = (Stats)ac.invoke(perfOName, "getStatsObject", params,
signature);
// rechercher PmiModuleConfig et liez-le à des données
String type = on.getKeyProperty("type");
if (type.equals(MBeanTypeList.SERVER_MBEAN))
setServerConfig(stats);
else
stats.setConfig(PmiClient.findConfig(configs, on));
return stats;
}
catch(Exception e) {
failed = true;
new AdminException(e).printStackTrace();
System.out.println("getStatsObject: Exception Thrown");
return null;
}
}
/**
* Exemple de code pour naviguer et obtenir la valeur des données de l'objet Stats.
*/
private void processStats(Stats stat) {
processStats(stat, "");
}
/**
* Exemple de code pour naviguer et obtenir la valeur des données de l'objet Stats
et Statistic.
* @deprecated Use 6.0 APIs.
*/
private void processStats(Stats stat, String indent) {
if(stat == null) return;
System.out.println("\n\n");
// extrayez le nom du Stats
String name = stat.getName();
System.out.println(indent + "stats name=" + name);
// répertorier les noms de données
String[] dataNames = stat.getStatisticNames();
for (int i=0; i<dataNames.length; i++)
System.out.println(indent + " " + "data name=" + dataNames[i]);
System.out.println("");
// répertoriez toutes les données
//com.ibm.websphere.management.statistics.Statistic[] allData =
stat.getStatistics();
// Rattachez-les au type Statistique de PMI pour en extraire
davantage
// Montrez également comment effectuer la traduction.
//Statistic[] dataMembers = (Statistic[])allData;
Statistic[] dataMembers = stat.listStatistics();
if (dataMembers != null) {
for(int i=0; i<dataMembers.length; i++) {
System.out.print(indent + " " + "data name=" +
PmiClient.getNLSValue(dataMembers[i].getName())
+ ", description=" + PmiClient.getNLSValue
(dataMembers[i].getDescription())
+ ", startTime=" + dataMembers[i].getStartTime()
+ ", lastSampleTime=" + dataMembers[i].getLastSampleTime());
if(dataMembers[i].getDataInfo().getType() == TYPE_LONG) {
System.out.println(", count=" + ((CountStatisticImpl)dataMembers[i]).getCount());
}
else if(dataMembers[i].getDataInfo().getType() == TYPE_STAT) {
TimeStatisticImpl data = (TimeStatisticImpl)dataMembers[i];
System.out.println(", count=" + data.getCount()
+ ", total=" + data.getTotal()
+ ", mean=" + data.getMean()
+ ", min=" + data.getMin()
+ ", max=" + data.getMax());
}
else if(dataMembers[i].getDataInfo().getType() == TYPE_LOAD) {
RangeStatisticImpl data = (RangeStatisticImpl)dataMembers[i];
System.out.println(", current=" + data.getCurrent()
+ ", integral=" + data.getIntegral()
+ ", avg=" + data.getMean()
+ ", lowWaterMark=" + data.getLowWaterMark()
+ ", highWaterMark=" + data.getHighWaterMark());
}
}
}
// de manière récursive pour substats
Stats[] substats = (Stats[])stat.getSubStats();
if(substats == null || substats.length == 0)
return;
for(int i=0; i<substats.length; i++) {
processStats(substats[i], indent + " ");
}
}
/**
* L'objet Stats renvoyé du serveur ne comporte pas d'informations de configuration statiques.
Vous devez le définir côté client.
*/
public void setServerConfig(Stats stats) {
if(stats == null) return;
if(stats.getType() != TYPE_SERVER) return;
PmiModuleConfig config = null;
Stats[] statList = stats.getSubStats();
if (statList == null || statList.length == 0)
return;
Stats oneStat = null;
for(int i=0; i<statList.length; i++) {
oneStat = statList[i];
if (oneStat == null) continue;
config = PmiClient.findConfig(configs, oneStat.getStatsType());
//getName
if(config != null)
oneStat.setConfig(config);
else
{
config = getStatsConfig (oneStat.getStatsType());
if (config != null)
oneStat.setConfig(config);
else
System.out.println("Error: get null config for " + oneStat.getStatsType());
}
}
}
/**
* exemple de code pour montrer comment obtenir un MBeanStatDescriptor spécifique
* @deprecated Use 6.0 APIs.
*/
public MBeanStatDescriptor getStatDescriptor(ObjectName oName, String name) {
try {
Object[] params = new Object[]{serverOName};
String[] signature= new String[]{"javax.management.ObjectName"};
MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke
(perfOName, "listStatMembers", params, signature);
if (msds == null)
return null;
for (int i=0; i<msds.length; i++) {
if (msds[i].getName().equals(name))
return msds[i];
}
return null;
}
catch(Exception e) {
new AdminException(e).printStackTrace();
System.out.println("listStatMembers: Exception Thrown");
return null;
}
}
/**
* exemple de code pour montrer comment naviguer dans MBeanStatDescriptor via
listStatMembers
* @deprecated Use 6.0 APIs.
*/
public MBeanStatDescriptor[] listStatMembers(ObjectName mName) {
if (mName == null)
return null;
try {
Object[] params = new Object[]{mName};
String[] signature= new String[]{"javax.management.ObjectName"};
MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke
(perfOName, "listStatMembers", params, signature);
if (msds == null)
return null;
for (int i=0; i<msds.length; i++) {
MBeanStatDescriptor[] msds2 = listStatMembers(msds[i]);
}
return null;
}
catch(Exception e) {
new AdminException(e).printStackTrace();
System.out.println("listStatMembers: Exception Thrown");
return null;
}
}
/**
* Exemple de code pour extraire MBeanStatDescriptors
* @deprecated Use 6.0 APIs.
*/
public MBeanStatDescriptor[] listStatMembers(MBeanStatDescriptor mName) {
if (mName == null)
return null;
try {
Object[] params = new Object[]{mName};
String[] signature= new String[]{"com.ibm.websphere.pmi.stat.MBeanStatDescriptor"};
MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke(perfOName, "listStatMembers",
params, signature);
if (msds == null)
return null;
for (int i=0; i<msds.length; i++) {
MBeanStatDescriptor[] msds2 = listStatMembers(msds[i]);
// you may recursively call listStatMembers until find the one you want
}
return msds;
}
catch(Exception e) {
new AdminException(e).printStackTrace();
System.out.println("listStatMembers: Exception Thrown");
return null;
}
}
/**
* exemple de code pour extraire des données PMI à partir de beanModule
* @deprecated Use 6.0 APIs.
*/
public void testEJB() {
// Il s'agit de MBeanStatDescriptor for Enterprise EJB
MBeanStatDescriptor beanMsd = getStatDescriptor(serverOName,
PmiConstants.BEAN_MODULE);
if (beanMsd == null)
System.out.println("Error: cannot find beanModule");
// obtenir le Stats pour le niveau de module uniquement car la condition récursive est fausse
Stats stats = getStatsObject(beanMsd.getObjectName(), beanMsd.
getStatDescriptor(), false); // pass true if you wannt data from individual beans
// rechercher la RT de la méthode avg
TimeStatisticImpl rt = (TimeStatisticImpl)stats.getStatistic
(EJBStatsImpl.METHOD_RT);
System.out.println("rt is " + rt.getMean());
try {
java.lang.Thread.sleep(5000);
} catch (Exception ex) {
ex.printStackTrace();
}
// obtenir Stats à nouveau
Stats stats2 = getStatsObject(beanMsd.getObjectName(), beanMsd.
getStatDescriptor(), false); // pass true if you wannt data from individual beans
// rechercher la RT de la méthode avg
TimeStatisticImpl rt2 = (TimeStatisticImpl)stats2.getStatistic
(EJBStatsImpl.METHOD_RT);
System.out.println("rt2 is " + rt2.getMean());
// calculer la différence entre cette heure et la dernière heure.
TimeStatisticImpl deltaRt = (TimeStatisticImpl)rt2.delta(rt);
System.out.println("deltaRt is " + rt.getMean());
}
/**
* Exemple de code pour montrer comment appeler StatisticProvider MBean
directement.
* @deprecated Use 6.0 APIs.
*/
public void testJSR77Stats() {
// rechercher d'abord MBean ObjectName souhaité.
// Consulter la méthode getObjectNames pour le code d'échantillon.
// supposons que nous voulions appeler getStats sur JVM MBean pour obtenir des statistiques
try {
com.ibm.websphere.management.statistics.JVMStats stats =
(com.ibm.websphere.management.statistics.JVMStats)ac.
invoke(jvmOName, "getStats", null, null);
System.out.println("\n get data from JVM MBean");
if (stats == null) {
System.out.println("WARNING: getStats on JVM MBean returns null");
} else {
// établir d'abord un lien avec les informations statiques si vous le souhaitez
((Stats)stats).setConfig(PmiClient.findConfig(configs, jvmOName));
// imprimer toutes les données souhaitées
//System.out.println(stats.toString());
// naviguer et obtenir les données de l'objet stats
processStats((Stats)stats);
// appeler les méthodes JSR77 sur JVMStats pour obtenir les données correspondantes
com.ibm.websphere.management.statistics.CountStatistic upTime =
stats.getUpTime();
com.ibm.websphere.management.statistics.BoundedRangeStatistic
heapSize = stats.getHeapSize();
if (upTime != null)
System.out.println("\nJVM up time is " + upTime.getCount());
if (heapSize != null)
System.out.println("\nheapSize is " + heapSize.getCurrent());
}
} catch (Exception ex) {
ex.printStackTrace();
new AdminException(ex).printStackTrace();
}
}
/**
Obtenir PmiModuleConfig du serveur
*/
public PmiModuleConfig getStatsConfig (String statsType)
{
try
{
return (PmiModuleConfig)ac.invoke(perfOName, "getConfig",
new String[]{statsType},
new String[]{"java.lang.String"});
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
}
/**
* Obtenir PmiModuleConfig basé sur MBean ObjectName
@deprecated Use com.ibm.websphere.pmi.client.PmiClient.findConfig()
*/
public PmiModuleConfig findConfig(ObjectName on) {
if (on == null) return null;
String type = on.getKeyProperty("type");
System.out.println("findConfig: mbean type =" + type);
for (int i=0; i<configs.length ; i++) {
if (configs[i].getMbeanType().equals(type))
return configs[i];
}
System.out.println("Error: cannot find the config");
return null;
}
/**
* Obtenir PmiModuleConfig basé sur le nom du module PMI
@deprecated Use com.ibm.websphere.pmi.client.PmiClient.findConfig()
*/
public PmiModuleConfig findConfig(String moduleName) {
if (moduleName == null) return null;
for (int i=0; i<configs.length ; i++) {
if (configs[i].getShortName().equals(moduleName))
return configs[i];
}
System.out.println("Error: cannot find the config");
return null;
}
}