Use AdminClient to query the MBean ObjectNames Once
you get the AdminClient instance, you can call queryNames to get a list of
MBean ObjectNames depending on your query string. To get all the ObjectNames,
you can use the following example code. If you have a specified query string,
you will get a subset of ObjectNames.javax.management.ObjectName on = new javax.management.ObjectName("WebSphere:*");
Set objectNameSet= ac.queryNames(on, null);
// you can check properties like type, name, and process to find a specified ObjectName
After you get all the ObjectNames, you can use the following example
code to get all the node names: HashSet nodeSet = new HashSet();
for(Iterator i = objectNameSet.iterator(); i.hasNext(); on =
(ObjectName)i.next()) {
String type = on.getKeyProperty("type");
if(type != null && type.equals("Server")) {
nodeSet.add(servers[i].getKeyProperty("node"));
}
}
Note, this will only return nodes that are started. To
list running servers on the node, you can either check the node name and type
for all the ObjectNames or use the following example code: StringBuffer oNameQuery= new StringBuffer(41);
oNameQuery.append("WebSphere:*");
oNameQuery.append(",type=").append("Server");
oNameQuery.append(",node=").append(mynode);
oSet= ac.queryNames(new ObjectName(oNameQuery.toString()), null);
Iterator i = objectNameSet.iterator ();
while (i.hasNext ()) {
on=(objectName) i.next();
String process= on[i].getKeyProperty("process");
serversArrayList.add(process);
}
Invoke operations on PerfMBean through the AdminClient. Once
you get the PerfMBean(s) in the application server from which you want to
get PMI data, you can invoke the following operations on the PerfMBean through
AdminClient API:
- setStatisticSet: Enable PMI data using the pre-defined statistic sets.
Object[] params = new Object[] { com.ibm.websphere.pmi.stat.StatConstants.STATISTIC_SET_EXTENDED};
String[] signature = new String[] {"java.lang.String"};
ac.invoke (perfOName, "setStatisticSet", params, signature);
- getStatisticSet: Returns the current statistic set.
String setname = (String) ac.invoke (perfOName, "getStatisticSet", null, null);
- setCustomSetString: Customizing PMI data that is enabled using fine-grained control.
This method allows to enable or disable statistics selectively. The format of the custom
set specification string is STATS_NAME=ID1,ID2,ID3 seperated by ':', where STATS_NAME
and IDs are defined in WS*Stat interfaces in com.ibm.websphere.pmi.stat package.
params[0] = new String (WSJVMStats.NAME + "=" + WSJVMStats.HeapSize);
params[1] = new Boolean (false);
signature = new String[] {"java.lang.String", "java.lang.Boolean"};
ac.invoke (perfOName, "setCustomSetString", params, signature);
Note: Statistics that are not listed in the set string are not changed.
- getCustomSetString: Returns the current custom set specification as a string
String setstring = (String) ac.invoke (perfOName, "getCustomSetString", null, null);
- setInstrumentationLevel: set the instrumentation level
params[0] = new MBeanLevelSpec(objectName, new int[]{WSJVMStats.HEAPSIZE});
params[1] = new Boolean(true);
signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanLevelSpec",
"java.lang.Boolean"};
ac.invoke(perfOName, "setInstrumentationLevel", params, signature);
- getInstrumentationLevel: get the instrumentation level
params[0] = objectName;
params[1] = new Boolean(recursive);
String[] signature= new String[]{
"javax.management.ObjectName", "java.lang.Boolean"};
MBeanLevelSpec[] mlss = (MBeanLevelSpec[])ac.invoke(perfOName,
"getInstrumentationLevel", params, signature);
- setInstrumentationLevel: set the instrumentation level (deprecated in V6.0)
params[0] = new MBeanLevelSpec(objectName, optionalSD, level);
params[1] = new Boolean(true);
signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanLevelSpec",
"java.lang.Boolean"};
ac.invoke(perfOName, "setInstrumentationLevel", params, signature);
- getInstrumentationLevel: get the instrumentation level (deprecated in V6.0)
Object[] params = new Object[2];
params[0] = new MBeanStatDescriptor(objectName, optionalSD);
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);
- getConfigs: get PMI static config info for all the MBeans
configs = (PmiModuleConfig[])ac.invoke(perfOName, "getConfigs", null, null);
- getConfig: get PMI static config info for a specific MBean
ObjectName[] params = {objectName};
String[] signature= { "javax.management.ObjectName" };
config = (PmiModuleConfig)ac.invoke(perfOName, "getConfig", params,
signature);
- getStatsObject: you can use either ObjectName or MBeanStatDescriptor
Object[] params = new Object[2];
params[0] = objectName; // either ObjectName or or MBeanStatDescriptor
params[1] = new Boolean(recursive);
String[] signature = new String[] { "javax.management.ObjectName",
"java.lang.Boolean"};
Stats stats = (Stats)ac.invoke(perfOName, "getStatsObject", params,
signature);
Note: The returned data only have dynamic information (value and time stamp).
See PmiJmxTest.java for additional code to link the configuration information with the
returned data.
- getStatsArray: you can use either ObjectName or MBeanStatDescriptor
ObjectName[] onames = new ObjectName[]{objectName1, objectName2};
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);
Note: The returned data only have dynamic information (value and time stamp).
See PmiJmxTest.java for additional code to link the configuration information with the
returned data.
- listStatMembers: navigate the PMI module trees
Object[] params = new Object[]{mName};
String[] signature= new String[]{"javax.management.ObjectName"};
MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke(perfOName,
"listStatMembers", params, signature);
or,
Object[] params = new Object[]{mbeanSD};
String[] signature= new String[]
{"com.ibm.websphere.pmi.stat.MBeanStatDescriptor"};
MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke
(perfOName, "listStatMembers", params, signature);
Refer the API documentation for deprecated classes
Note: Repeated calls to retrieve PMI data might return references to
the same objects. If you want to compare values over time, you
must save the actual data and not references to the PMI objects containing
the data. For example, if you have a WSCountStatistic object, call getCount()
and save the result for later comparison, instead of saving a reference to
the object.
- To use an individual MBean: You need to get the AdminClient
instance and the ObjectName for the individual MBean. Then you can simply
get the Stats attribute on the MBean.