Desarrollo de sus propias aplicaciones de supervisión
Puede utilizar las interfaces de la Infraestructura de supervisión del rendimiento (PMI) para desarrollar sus propias aplicaciones para recopilar y mostrar información del rendimiento.
Acerca de esta tarea
Hay tres interfaces de este tipo: Java™ Machine Extension (JMX), cliente PMI y servlet. Las tres interfaces devuelven los mismos datos subyacentes.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)

Se puede acceder a la interfaz de JMX mediante la herramienta
AdminClient tal como se describe en el apartado Utilización de la interfaz JMX para desarrollar su propia aplicación de supervisión. La interfaz cliente PMI es una interfaz Java. La interfaz de servlets es quizá la más sencilla, que requiere una programación mínima, dado que la salida es XML.
Procedimiento
- Uso del cliente PMI para desarrollar la aplicación de supervisión (abandonado).
- Recuperación de los datos de rendimiento con PerfServlet
- Compilación de aplicaciones de supervisión
- Ejecución de sus nuevas aplicaciones de supervisión
- Utilización de la interfaz JMX para desarrollar su propia aplicación de supervisión.
- Desarrollo de interfaces PMI (versión 4.0) (está en desuso).
Ejemplo
Este ejemplo proporciona código utilizando directamente la API JMZ (Java Management Extension). Si desea obtener más información sobre la compilación de código fuente, consulte "Compilación de las aplicaciones de supervisión".
package com.ibm.websphere.pmi;
import com.ibm.websphere.management.AdminClient;
import com.ibm.websphere.management.AdminClientFactory;
import com.ibm.websphere.management.exception.ConnectorException;
import com.ibm.websphere.management.exception.InvalidAdminClientTypeException;
import com.ibm.websphere.management.exception.*;
import java.util.*;
import javax.management.*;
import com.ibm.websphere.pmi.*;
import com.ibm.websphere.pmi.client.*;
import com.ibm.websphere.pmi.stat.*;
/**
* Código de ejemplo utilizando la API AdminClient para obtener datos PMI de
PerfMBean
* y MBeans individuales.
*
* @ibm-api
*/
public class PmiJmxTest implements PmiConstants
{
private AdminClient ac = null;
private ObjectName perfOName = null;
private ObjectName serverOName = null;
private ObjectName wlmOName = null;
private ObjectName jvmOName = null;
private ObjectName orbtpOName = null;
private boolean failed = false;
private PmiModuleConfig[] configs = null;
/**
* Crear un objeto de prueba (test) nuevo
* (hace falta un constructor por omisión para la estructura de prueba)
*/
public PmiJmxTest()
{
}
/**
* @param args[0] host
* @param args[1] port, opcional, valor predeterminado 8880
* @param args[2] connectorType, opcional, por omisión es el conector SOAP
*
*/
public static void main(String[] args)
{
PmiJmxTest instance = new PmiJmxTest();
// analizar argumentos y crear el objeto AdminClient
instance.init(args);
// navegar por todos los MBean ObjectNames y poner en memoria caché los que interesen
instance.getObjectNames();
boolean v6 = !(new Boolean(System.getProperty ("websphereV5Statistics"))).
booleanValue();
if( v6 )
{
// probar las API V6
instance.doTestV6();
}
else
{
// establecer nivel, obtener datos, visualizar datos
instance.doTest();
// probar los datos EJB
instance.testEJB();
// cómo utilizar SR77 getStats para un MBean individual distinto de PerfMBean
instance.testJSR77Stats();
}
}
/**
* analizar args y getAdminClient
*/
public void init(String[] args)
{
try
{
String host = null;
String port = "8880";
String connector = AdminClient.CONNECTOR_TYPE_SOAP;
if(args.length < 1) {
System.err.println("ERROR: Usage: PmiJmxTest <host> [<port>] [<connector>]");
System.exit(2);
}
else
{
host = args[0];
if (args.length > 1)
port = args[1];
if (args.length > 2)
connector = args[2];
}
if(host == null) {
host = "localhost";
}
if (port == null) {
port = "2809";
}
if (connector == null) {
connector = AdminClient.CONNECTOR_TYPE_SOAP;
}
System.out.println("host=" + host + " , port=" + port + ",connector=" + connector);
//--------------------------------------------------------------------
// Obtener el objeto ac para el AppServer
//---------------------------------------------------------------------
System.out.println("main: create the adminclient");
ac = getAdminClient(host, port, connector);
}
catch (Exception ex)
{
failed = true;
new AdminException(ex).printStackTrace();
ex.printStackTrace();
}
}
/**
* obtener AdminClient mediante el host, puerto y conector dados
*/
public AdminClient getAdminClient(String hostStr, String portStr, String
connector) {
System.out.println("getAdminClient: host=" + hostStr + " , portStr=" + portStr);
AdminClient ac = null;
java.util.Properties props = new java.util.Properties();
props.put(AdminClient.CONNECTOR_TYPE, connector);
props.put(AdminClient.CONNECTOR_HOST, hostStr);
props.put(AdminClient.CONNECTOR_PORT, portStr);
/* establecer las siguientes propiedades si la seguridad está
habilitada y se utiliza
el conector SOAP */
/* A continuación se muestra cómo establecer las propiedades del conector
SOAP cuando
la seguridad está habilitada.
Consulte el javadoc de AdminClient para obtener más información.
Properties props = new Properties();
props.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
props.setProperty(AdminClient.CONNECTOR_PORT, "8880");
props.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_
TYPE_SOAP);
props.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");
props.setProperty(AdminClient.USERNAME, "test2");
props.setProperty(AdminClient.PASSWORD, "user24test");
props.setProperty("javax.net.ssl.trustStore",
"C:/WebSphere/AppServer/etc/DummyClientTrustFile.jks");
props.setProperty("javax.net.ssl.keyStore",
"C:/WebSphere/AppServer/etc/DummyClientKeyFile.jks");
props.setProperty("javax.net.ssl.trustStorePassword", "WebAS");
props.setProperty("javax.net.ssl.keyStorePassword", "WebAS");
*/
try {
ac = AdminClientFactory.createAdminClient(props);
}
catch(Exception ex) {
failed = true;
new AdminException(ex).printStackTrace();
System.out.println("getAdminClient: exception");
}
return ac;
}
/**
* obtener todos los ObjectNames.
*/
public void getObjectNames() {
try {
//--------------------------------------------------------------------
// Obtener una lista de nombres de objetos
//--------------------------------------------------------------------
javax.management.ObjectName on = new javax.management.ObjectName("WebSphere:*");
//---------------------------------------------------------------------
// obtener todos los objectnames de este servidor
//--------------------------------------------------------------------
Set objectNameSet= ac.queryNames(on, null);
//--------------------------------------------------------------------
// Obtener los nombres de objetos deseados: Perf, Server, JVM, WLM (solo en ND)
//--------------------------------------------------------------------
if(objectNameSet != null) {
Iterator i = objectNameSet.iterator();
while (i.hasNext()) {
on = (ObjectName)i.next();
String type = on.getKeyProperty("type");
// descomentar si desea imprimir el nombre de objeto de cada MBean
// System.out.println("\n\n" + on.toString());
// buscar los MBeans que interesan
if(type != null && type.equals("Perf")) {
System.out.println("\nMBean: perf =" + on.toString());
perfOName = on;
}
if(type != null && type.equals("Server")) {
System.out.println("\nMBean: Server =" + on.toString());
serverOName = on;
}
if(type != null && type.equals("JVM")) {
System.out.println("\nMBean: jvm =" + on.toString());
jvmOName = on;
}
if(type != null && type.equals("WLMAppServer")) {
System.out.println("\nmain: WLM =" + on.toString());
wlmOName = on;
}
if(type != null && type.equals("ThreadPool"))
{
String name = on.getKeyProperty("name");
if (name.equals("ORB.thread.pool"))
System.out.println("\nMBean: ORB ThreadPool =" + on.toString());
orbtpOName = on;
}
}
}
else {
System.err.println("main: ERROR: no se han encontrado nombres de objeto");
System.exit(2);
}
// Debe tener Perf MBean para obtener los datos PMI.
if (perfOName == null)
{
System.err.println("main: cannot get PerfMBean. Make sure PMI is enabled");
System.exit(3);
}
}
catch(Exception ex)
{
failed = true;
new AdminException(ex).printStackTrace();
ex.printStackTrace();
}
}
/** Probar las API V6 */
public void doTestV6 ()
{
System.out.println ("\ndoTestV6() output:\n");
// los siguientes métodos son específicos de V6 y muestran las API V6. Establezca el distintivo en false
String v5PropFlag = System.setProperty ("websphereV5Statistics", "false");
try
{
Object[] params;
String[] signature;
// obtener el conjunto de estadísticas actual que se utiliza en la
supervisión
System.out.println ("\nCurrent statistic set: " + ac.invoke(perfOName, "getStatisticSet", null, null));
// obtener todas las estadísticas del servidor utilizando Perf MBean
System.out.println ("\nGet all statistics in PMI tree");
signature = new String[]{"[Lcom.ibm.websphere.pmi.stat.StatDescriptor;","java.lang.Boolean"};
params = new Object[] {new StatDescriptor[]{new StatDescriptor(null)}, new Boolean(true)};
com.ibm.websphere.pmi.stat.WSStats[] wsStats = (com.ibm.websphere.pmi.stat.WSStats[])
ac.invoke(perfOName, "getStatsArray", params, signature);
System.out.println (wsStats[0].toString());
// obtener estadísticas de un JVM MBean utilizando J2EE JMX
System.out.println ("\nGet JVM statistics using JVM MBean");
javax.management.j2ee.statistics.Stats j2eeStats = (javax.management.j2ee.statistics.Stats)
ac.getAttribute(jvmOName, "stats");
System.out.println (j2eeStats.toString());
// obtener estadísticas de una agrupación de hebras específica -- agrupación de hebras de contenedor Web
System.out.println ("\nGet statistics for a specific thread pool");
signature = new String[]{"[Lcom.ibm.websphere.pmi.stat.StatDescriptor;","java.lang.Boolean"};
StatDescriptor webContainerPoolSD = new StatDescriptor (new String[] {WSThreadPoolStats.NAME,
"WebContainer"});
params = new Object[] {new StatDescriptor[]{webContainerPoolSD}, new Boolean(true)};
wsStats = (com.ibm.websphere.pmi.stat.WSStats[])
ac.invoke(perfOName, "getStatsArray", params, signature);
System.out.println (wsStats[0].toString());
// establecer la supervisión en el conjunto de estadísticas "extended"
System.out.println ("\nSet monitoring to statistic set 'Extended'");
signature = new String[]{"java.lang.String"};
params = new Object[] {StatConstants.STATISTIC_SET_EXTENDED};
ac.invoke(perfOName, "setStatisticSet", params, signature);
// obtener el conjunto de estadísticas actual que se utiliza en la
supervisión
System.out.println ("\nCurrent statistic set: "+ ac.invoke(perfOName, "getStatisticSet", null, null));
// habilitar de forma selectiva las estadísticas de todas las
agrupaciones de hebras
System.out.println ("\nSelectively enable statistics (ActiveCount and PoolSize statistics)
for thread pool -- fine grained control");
StatDescriptor threadPoolSD = new StatDescriptor (new String[]
{WSThreadPoolStats.NAME});
// crear un objeto spec para habilitar ActiveCount y PoolSize en la agrupación de hebras
StatLevelSpec[] spec = new StatLevelSpec[1];
spec[0] = new StatLevelSpec (threadPoolSD.getPath(), new int[]
{WSThreadPoolStats.ActiveCount, WSThreadPoolStats.PoolSize});
signature = new String[]{"[Lcom.ibm.websphere.pmi.stat.StatLevelSpec;","java.lang.Boolean"};
params = new Object[] {spec, new Boolean(true)};
ac.invoke(perfOName, "setInstrumentationLevel", params, signature);
// obtener el conjunto de estadísticas actual que se utiliza en la
supervisión
System.out.println ("\nCurrent statistic set: "+ ac.invoke(perfOName, "getStatisticSet", null, null));
// obtener estadísticas de todas las agrupaciones de hebras
System.out.println ("\nGet statistics from all thread pools");
signature = new String[]{"[Lcom.ibm.websphere.pmi.stat.StatDescriptor;","java.lang.Boolean"};
params = new Object[] {new StatDescriptor[]{threadPoolSD},new Boolean(true)};
wsStats = (com.ibm.websphere.pmi.stat.WSStats[])
ac.invoke(perfOName, "getStatsArray", params, signature);
System.out.println (wsStats[0].toString());
}
catch (Exception e)
{
e.printStackTrace();
}
// establecer la propiedad a su valor original
System.setProperty ("websphereV5Statistics", v5PropFlag);
}
/**
* Código de ejemplo para establecer nivel, obtener datos y visualizar datos. (V5)
* @deprecated Utilizar las API 6.0.
*/
public void doTest()
{
try
{
// primero obtener todas los configs - utilizadas para establecer información estática para Stats
// Nota: el servidor sólo devuelve información del valor y hora.
// No se devuelve una descripción, unidad, etc, con los datos PMI para reducir el coste de las comunicaciones.
// Tieene que llamar a setConfig para enlazar luego la información estática y los datos
configs = (PmiModuleConfig[])ac.invoke(perfOName, "getConfigs", null, null);
// imprimir todos los módulos PMI y los tipos de mbean coincidentes
for (int i=0; i<configs.length; i++)
System.out.println("config: moduleName=" + configs[i].getShortName() +
", mbeanType=" + configs[i].getMbeanType());
// establecer el nivel de instrumentación para el servidor
setInstrumentationLevel(serverOName, null, PmiConstants.LEVEL_HIGH);
// ejemplo para utilizar StatDescriptor.
// Tenga en cuenta que el módulo WLM sólo está disponible en ND
StatDescriptor sd = new StatDescriptor(new String[] {"wlmModule.server"});
setInstrumentationLevel(wlmOName, sd, PmiConstants.LEVEL_HIGH);
// ejemplo para InstrumentationLevel
MBeanLevelSpec[] mlss = getInstrumentationLevel(wlmOName, sd, true);
// puede llamar a getLevel(), getObjectName(), getStatDescriptor() en mlss[i]
// obtener datos para el servidor
Stats stats = getStatsObject(serverOName, true);
System.out.println(stats.toString());
// obtener para el submódulo del servidor WLM
stats = getStatsObject(wlmOName, sd, true);
if (stats == null)
System.out.println("Cannot get Stats for WLM data");
else
System.out.println(stats.toString());
// obtener datos para JVM MBean
stats = getStatsObject(jvmOName, true);
processStats(stats);
// obtener datos para varios MBeans
ObjectName[] onames = new ObjectName[]{orbtpOName, jvmOName};
Object[] params = new Object[]{onames, new Boolean(true)};
String[] signature = new String[]{"[Ljavax.management.ObjectName;",
"java.lang.Boolean"};
Stats[] statsArray = (Stats[])ac.invoke(perfOName, "getStatsArray",
params, signature);
// puede llamar a toString o processStats en statsArray[i]
if (!failed)
System.out.println("All tests passed");
else
System.out.println("Some tests failed");
}
catch(Exception ex)
{
new AdminException(ex).printStackTrace();
ex.printStackTrace();
}
}
/**
* Código de ejemplo para obtener nivel
*/
protected MBeanLevelSpec[] getInstrumentationLevel(ObjectName on, StatDescriptor sd, boolean recursive)
{
if (sd == null)
return getInstrumentationLevel(on, recursive);
System.out.println("\ntest getInstrumentationLevel\n");
try {
Object[] params = new Object[2];
params[0] = new MBeanStatDescriptor(on, sd);
params[1] = new Boolean(recursive);
String[] signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanStatDescriptor", "java.lang.Boolean"};
MBeanLevelSpec[] mlss = (MBeanLevelSpec[])ac.invoke(perfOName, "getInstrumentationLevel", params, signature);
return mlss;
}
catch(Exception e){
new AdminException(e).printStackTrace();
System.out.println("getInstrumentationLevel: Exception Thrown");
return null;
}
}
/**
* Código de ejemplo para obtener nivel
*/
protected MBeanLevelSpec[] getInstrumentationLevel(ObjectName on,
boolean recursive) {
if (on == null)
return null;
System.out.println("\ntest getInstrumentationLevel\n");
try {
Object[] params = new Object[]{on, new Boolean(recursive)};
String[] signature = new String[] { "javax.management.ObjectName",
"java.lang.Boolean"};
MBeanLevelSpec[] mlss = (MBeanLevelSpec[])ac.invoke(perfOName,
"getInstrumentationLevel", params, signature);
return mlss;
}
catch(Exception e){
new AdminException(e).printStackTrace();
failed = true;
System.out.println("getInstrumentationLevel: Exception Thrown");
return null;
}
}
/**
* Código de ejemplo para establecer nivel
* @deprecated Utilizar las API 6.0.
*/
protected void setInstrumentationLevel(ObjectName on, StatDescriptor sd,
int level) {
System.out.println("\ntest setInstrumentationLevel\n");
try {
Object[] params = new Object[2];
String[] signature = null;
MBeanLevelSpec[] mlss = null;
params[0] = new MBeanLevelSpec(on, sd, level);
params[1] = new Boolean(true);
signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanLevelSpec","java.lang.Boolean"};
ac.invoke(perfOName, "setInstrumentationLevel", params, signature);
}
catch(Exception e){
failed = true;
new AdminException(e).printStackTrace();
System.out.println("setInstrumentationLevel: FAILED: Exception Thrown");
}
}
/**
* Código de ejemplo para obtener un objeto Stats
* @deprecated Utilizar las API 6.0.
*/
public Stats getStatsObject(ObjectName on, StatDescriptor sd, boolean
recursive) {
if (sd == null)
return getStatsObject(on, recursive);
System.out.println("\ntest getStatsObject\n");
try {
Object[] params = new Object[2];
params[0] = new MBeanStatDescriptor(on, sd); // construct MBeanStatDescriptor
params[1] = new Boolean(recursive);
String[] signature = new String[] { "com.ibm.websphere.pmi.stat.MBeanStatDescriptor", "java.lang.Boolean"};
Stats stats = (Stats)ac.invoke(perfOName, "getStatsObject", params, signature);
if (stats == null) return null;
// buscar PmiModuleConfig y enlazarlo con los datos
String type = on.getKeyProperty("type");
if (type.equals(MBeanTypeList.SERVER_MBEAN))
setServerConfig(stats);
else
stats.setConfig(PmiClient.findConfig(configs, on));
return stats;
} catch(Exception e) {
failed = true;
new AdminException(e).printStackTrace();
System.out.println("getStatsObject: Exception Thrown");
return null;
}
}
/**
* Código de ejemplo para obtener un objeto Stats
*/
public Stats getStatsObject(ObjectName on, boolean recursive) {
if (on == null)
return null;
System.out.println("\ntest getStatsObject\n");
try {
Object[] params = new Object[]{on, new Boolean(recursive)};
String[] signature = new String[] { "javax.management.ObjectName",
"java.lang.Boolean"};
Stats stats = (Stats)ac.invoke(perfOName, "getStatsObject", params,
signature);
// buscar PmiModuleConfig y enlazarlo con los datos
String type = on.getKeyProperty("type");
if (type.equals(MBeanTypeList.SERVER_MBEAN))
setServerConfig(stats);
else
stats.setConfig(PmiClient.findConfig(configs, on));
return stats;
}
catch(Exception e){
failed = true;
new AdminException(e).printStackTrace();
System.out.println("getStatsObject: Exception Thrown");
return null;
}
}
/**
* Código de ejemplo para navegar y visualizar el valor de los datos del objeto Stats.
*/
private void processStats(Stats stat) {
processStats(stat, "");
}
/**
* Código de ejemplo para navegar y obtener el valor de los datos del objeto Stats
y Statistic.
* @deprecated Utilizar las API 6.0.
*/
private void processStats(Stats stat, String indent) {
if(stat == null) return;
System.out.println("\n\n");
// obtener el nombre de Stats
String name = stat.getName();
System.out.println(indent + "stats name=" + name);
// listar nombres de datos
String[] dataNames = stat.getStatisticNames();
for (int i=0; i<dataNames.length; i++)
System.out.println(indent + " " + "data name=" + dataNames[i]);
System.out.println("");
// listar todos los datos
//com.ibm.websphere.management.statistics.Statistic[] allData =
stat.getStatistics();
// lanzarlo para que sea el tipo Statistic de PMI y se puedan obtener más
// También mostrar cómo se hace la conversión.
//Statistic[] dataMembers = (Statistic[])allData;
Statistic[] dataMembers = stat.listStatistics();
if (dataMembers != null) {
for(int i=0; i<dataMembers.length; i++) {
System.out.print(indent + " " + "data name=" +
PmiClient.getNLSValue(dataMembers[i].getName())
+ ", description=" + PmiClient.getNLSValue
(dataMembers[i].getDescription())
+ ", startTime=" + dataMembers[i].getStartTime()
+ ", lastSampleTime=" + dataMembers[i].getLastSampleTime());
if(dataMembers[i].getDataInfo().getType() == TYPE_LONG) {
System.out.println(", count=" + ((CountStatisticImpl)dataMembers[i]).getCount());
}
else if(dataMembers[i].getDataInfo().getType() == TYPE_STAT) {
TimeStatisticImpl data = (TimeStatisticImpl)dataMembers[i];
System.out.println(", count=" + data.getCount()
+ ", total=" + data.getTotal()
+ ", mean=" + data.getMean()
+ ", min=" + data.getMin()
+ ", max=" + data.getMax());
}
else if(dataMembers[i].getDataInfo().getType() == TYPE_LOAD) {
RangeStatisticImpl data = (RangeStatisticImpl)dataMembers[i];
System.out.println(", current=" + data.getCurrent()
+ ", integral=" + data.getIntegral()
+ ", avg=" + data.getMean()
+ ", lowWaterMark=" + data.getLowWaterMark()
+ ", highWaterMark=" + data.getHighWaterMark());
}
}
}
// de modo recursivo para sub-stats
Stats[] substats = (Stats[])stat.getSubStats();
if(substats == null || substats.length == 0)
return;
for(int i=0; i<substats.length; i++) {
processStats(substats[i], indent + " ");
}
}
/**
* El objeto Stats que ha devuelto el servidor no tiene información de configuración estática.
Tiene que establecerlo en el extremo del cliente. */
public void setServerConfig(Stats stats) {
if(stats == null) return;
if(stats.getType() != TYPE_SERVER) return;
PmiModuleConfig config = null;
Stats[] statList = stats.getSubStats();
if (statList == null || statList.length == 0)
return;
Stats oneStat = null;
for(int i=0; i<statList.length; i++) {
oneStat = statList[i];
if (oneStat == null) continue;
config = PmiClient.findConfig(configs, oneStat.getStatsType());
//getName
if(config != null)
oneStat.setConfig(config);
else
{
config = getStatsConfig (oneStat.getStatsType());
if(config != null)
oneStat.setConfig(config);
else
System.out.println("Error: get null config for " + oneStat.getStatsType());
}
}
}
/**
* Código de ejemplo que muestra cómo obtener un MBeanStatDescriptor específico
* @deprecated Utilizar las API 6.0.
*/
public MBeanStatDescriptor getStatDescriptor(ObjectName oName, String name) {
try {
Object[] params = new Object[]{serverOName};
String[] signature= new String[]{"javax.management.ObjectName"};
MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke
(perfOName, "listStatMembers", params, signature);
if (msds == null)
return null;
for(int i=0; i<msds.length; i++) {
if (msds[i].getName().equals(name))
return msds[i];
}
return null;
}
catch(Exception e){
new AdminException(e).printStackTrace();
System.out.println("listStatMembers: Exception Thrown");
return null;
}
}
/**
* Código de ejemplo que muestra cómo navegar por MBeanStatDescriptor mediante
listStatMembers
* @deprecated Utilizar las API 6.0.
*/
public MBeanStatDescriptor[] listStatMembers(ObjectName mName) {
if (mName == null)
return null;
try {
Object[] params = new Object[]{mName};
String[] signature= new String[]{"javax.management.ObjectName"};
MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke
(perfOName, "listStatMembers", params, signature);
if (msds == null)
return null;
for(int i=0; i<msds.length; i++) {
MBeanStatDescriptor[] msds2 = listStatMembers(msds[i]);
}
return null;
}
catch(Exception e){
new AdminException(e).printStackTrace();
System.out.println("listStatMembers: Exception Thrown");
return null;
}
}
/**
* Código de ejemplo para obtener MBeanStatDescriptors
* @deprecated Utilizar las API 6.0.
*/
public MBeanStatDescriptor[] listStatMembers(MBeanStatDescriptor mName) {
if (mName == null)
return null;
try {
Object[] params = new Object[]{mName};
String[] signature= new String[]{"com.ibm.websphere.pmi.stat.MBeanStatDescriptor"};
MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke(perfOName, "listStatMembers",
params, signature);
if (msds == null)
return null;
for(int i=0; i<msds.length; i++) {
MBeanStatDescriptor[] msds2 = listStatMembers(msds[i]);
// puede llamar de forma recursiva a listStatMembers hasta que encuentre el deseado
}
return msds;
}
catch(Exception e){
new AdminException(e).printStackTrace();
System.out.println("listStatMembers: Exception Thrown");
return null;
}
}
/**
* Código de ejemplo para obtener datos PMI de beanModule
* @deprecated Utilizar las API 6.0.
*/
public void testEJB() {
// Este es el MBeanStatDescriptor para Enterprise EJB
MBeanStatDescriptor beanMsd = getStatDescriptor(serverOName,
PmiConstants.BEAN_MODULE);
if (beanMsd == null)
System.out.println("Error: cannot find beanModule");
// obtener Stats para nivel de módulo sólo porque recursive es igual a false
Stats stats = getStatsObject(beanMsd.getObjectName(), beanMsd.
getStatDescriptor(), false); // pasar true si desea datos de beans individuales
// buscar el método avg RT
TimeStatisticImpl rt = (TimeStatisticImpl)stats.getStatistic
(EJBStatsImpl.METHOD_RT);
System.out.println("rt is " + rt.getMean());
try {
java.lang.Thread.sleep(5000);
} catch (Exception ex) {
ex.printStackTrace();
}
// volver a obtener Stats
Stats stats2 = getStatsObject(beanMsd.getObjectName(), beanMsd.
getStatDescriptor(), false); // pasar true si desea datos de beans individuales
// buscar el método avg RT
TimeStatisticImpl rt2 = (TimeStatisticImpl)stats2.getStatistic
(EJBStatsImpl.METHOD_RT);
System.out.println("rt2 is " + rt2.getMean());
// calcular la diferencia entre esta hora y la última hora.
TimeStatisticImpl deltaRt = (TimeStatisticImpl)rt2.delta(rt);
System.out.println("deltaRt is " + rt.getMean());
}
/**
* Código de ejemplo que muestra cómo llamar a getStats directamente en
StatisticProvider MBean .
* @deprecated Utilizar las API 6.0.
*/
public void testJSR77Stats() {
// primero, buscar el MBean ObjectName que le interesa.
// Consulte en el método getObjectNames el código de ejemplo.
// presupone que desea llamar a getStats en JVM MBean para obtener Statistics
try {
com.ibm.websphere.management.statistics.JVMStats stats =
(com.ibm.websphere.management.statistics.JVMStats)ac.
invoke(jvmOName, "getStats", null, null);
System.out.println("\n get data from JVM MBean");
if (stats == null) {
System.out.println("WARNING: getStats on JVM MBean returns null");
} else {
// primero, enlazar con información estática si lo desea
((Stats)stats).setConfig(PmiClient.findConfig(configs, jvmOName));
// imprimir todos los datos si lo desea
//System.out.println(stats.toString());
// navegar y obtener los datos del objeto stats
processStats((Stats)stats);
// llamar a los métodos JSR77 en JVMStats para obtener los datos relacionados
com.ibm.websphere.management.statistics.CountStatistic upTime =
stats.getUpTime();
com.ibm.websphere.management.statistics.BoundedRangeStatistic
heapSize = stats.getHeapSize();
if (upTime != null)
System.out.println("\nJVM up time is " + upTime.getCount());
if (heapSize != null)
System.out.println("\nheapSize is " + heapSize.getCurrent());
}
} catch (Exception ex) {
ex.printStackTrace();
new AdminException(ex).printStackTrace();
}
}
/**
Obtener PmiModuleConfig del servidor
*/
public PmiModuleConfig getStatsConfig (String statsType)
{
try
{
return (PmiModuleConfig)ac.invoke(perfOName, "getConfig",
new String[]{statsType},
new String[]{"java.lang.String"});
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
/**
* Obtener PmiModuleConfig basándose en MBean ObjectName
@deprecated Utilizar com.ibm.websphere.pmi.client.PmiClient.findConfig()
*/
public PmiModuleConfig findConfig(ObjectName on) {
if (on == null) return null;
String type = on.getKeyProperty("type");
System.out.println("findConfig: mbean type =" + type);
for (int i=0; i<configs.length ; i++) {
if (configs[i].getMbeanType().equals(type))
return configs[i];
}
System.out.println("Error: cannot find the config");
return null;
}
/**
* Obtener PmiModuleConfig basándose en el nombre de módulo PMI
@deprecated Utilizar com.ibm.websphere.pmi.client.PmiClient.findConfig()
*/
public PmiModuleConfig findConfig(String moduleName) {
if (moduleName == null) return null;
for (int i=0; i<configs.length ; i++) {
if (configs[i].getShortName().equals(moduleName))
return configs[i];
}
System.out.println("Error: cannot find the config");
return null;
}
}