我正在實現一個servlet作爲JMX管理器,該JMX管理器運行在Tomcat的相同實例中,以便運行所有受監控的servlet。當我打開JConsole時,可以看到受監控servlet的數據。從我的經理servlet中我可以枚舉所有可用標準的MBean,包括我在監控的servlet中創建的,使用這樣的代碼:如何通過MBean獲取數據
JMXServiceURL url = new JMXServiceURL( "service:jmx:rmi://localhost:1099/jndi/rmi://localhost:1099/jmxrmi");
mConnector = JMXConnectorFactory.connect(url);
mMBSC = mConnector.getMBeanServerConnection();
mObjectName = new ObjectName("com.blahCompany.blah.blah:type=BlahBlah");
// just looking for one specific bean
Set<ObjectName> myMbean = mMBSC.queryNames(mObjectName, null);
if(myMBean.size() == 1) // I know it exists
{
MBeanInfo mbeanInfo = mMBSC.getMBeanInfo(<ObjectName extracted from Set>);
MBeanAttributeInfo[] mbeanAttributeInfos = mbeanInfo.getAttributes();
for(MBeanAttributeInfo attribInfo : mbeanAttributeInfos)
{
if(attribInfo.isReadable())
{
String attribName = attribInfo.getName();
String attribReturnType = attribInfo.getType();
// The data's somewhere ... where????
// In the MBeanInfo?
// In the MBeanAttributeInfo??
}
}
}
的問題是我不知道如何實際上從這些MBean中提取數據。答案一定是明顯的,因爲其他人似乎沒有問過,但我確實有一個禮物可以忽略這些明顯的問題。感謝您的幫助。
比爾
我更新了我的回答,提供了關於本地訪問mbean服務器的說明,從我的問題中瞭解到您的情況需要什麼(無需通過URL進行連接)。我認爲性能會比使用遠程連接更好。 – 2012-03-05 21:22:03