/*
* ASProbe.java
*
* Created on March 29, 2006, 4:44 PM
*/
package testmbeans;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
import java.lang.management.ThreadMXBean;
import javax.management.*;
/**
* Class ASProbe
* ASProbe Description
* @author bnevins
*/
public class ASProbe implements ASProbeMBean
{
public ASProbe()
{
refresh();
}
///////////////////////////////////////////////////////////////////////////
public long getHeapUsage()
{
refresh();
return heapUsage;
}
///////////////////////////////////////////////////////////////////////////
public long getHeapMax()
{
refresh();
return heapMax;
}
///////////////////////////////////////////////////////////////////////////
public int getThreadCount()
{
refresh();
return threadCount;
}
///////////////////////////////////////////////////////////////////////////
public int getPeakThreadCount()
{
refresh();
return peakThreadCount;
}
///////////////////////////////////////////////////////////////////////////
public int getNumApps()
{
refresh();
return numApps;
}
///////////////////////////////////////////////////////////////////////////
public int getNumEJBModules()
{
refresh();
return numEJB;
}
///////////////////////////////////////////////////////////////////////////
public int getNumWebModules()
{
refresh();
return numWeb;
}
///////////////////////////////////////////////////////////////////////////
public int getNumComponents()
{
refresh();
return numComponents;
}
///////////////////////////////////////////////////////////////////////////
public String[] getAppNames()
{
refresh();
return appNames;
}
///////////////////////////////////////////////////////////////////////////
public String[] getWebModuleNames()
{
refresh();
return webNames;
}
///////////////////////////////////////////////////////////////////////////
private void refresh()
{
long now = System.currentTimeMillis();
if(now - timestamp < 2000) // no more often than once per 2 seconds
return;
timestamp = now;
try
{
MBeanServerConnection mbsc = ManagementFactory.getPlatformMBeanServer();
MemoryMXBean mmb = ManagementFactory.newPlatformMXBeanProxy(mbsc,
ManagementFactory.MEMORY_MXBEAN_NAME, MemoryMXBean.class);
ThreadMXBean tmb = ManagementFactory.newPlatformMXBeanProxy(mbsc,
ManagementFactory.THREAD_MXBEAN_NAME, ThreadMXBean.class);
MemoryUsage mu = mmb.getHeapMemoryUsage();
heapUsage = mu.getCommitted();
heapMax = mu.getMax();
peakThreadCount = tmb.getPeakThreadCount();
threadCount = tmb.getThreadCount();
final ObjectName on = new ObjectName(BACKEND_MBEAN_ON);
final Object[] operParams = new Object[0];
final String[] operSign = new String[0];
String oper = "getAllDeployedJ2EEApplications";
ObjectName[] names = (ObjectName[])mbsc.invoke(on, oper, operParams, operSign);
numApps = names.length;
oper = "getAllDeployedEJBModules";
names = (ObjectName[])mbsc.invoke(on, oper, operParams, operSign);
numEJB = names.length;
oper = "getAllDeployedWebModules";
names = (ObjectName[])mbsc.invoke(on, oper, operParams, operSign);
numWeb = names.length;
oper = "getAllDeployedComponents";
names = (ObjectName[])mbsc.invoke(on, oper, operParams, operSign);
numComponents = names.length;
oper = "getJ2eeApplicationNamesList";
appNames = (String[])mbsc.invoke(on, oper, operParams, operSign);
oper = "getWebModuleNamesList";
webNames = (String[])mbsc.invoke(on, oper, operParams, operSign);
}
catch(Exception e)
{
numApps = -1;
heapUsage = -1;
}
}
///////////////////////////////////////////////////////////////////////////
private long timestamp;
private int numApps;
private int numEJB;
private int numWeb;
private int numComponents;
private long heapUsage;
private long heapMax;
private int peakThreadCount;
private int threadCount;
private String[] appNames;
private String[] webNames;
private static final String BACKEND_MBEAN_ON = "com.sun.appserv:category=config,type=applications";
}