这就是我访问 ServerInfo MBean 的方式。我用的是JBoss AS 5.1,但是这个方法应该是一样的。
要调用listThreadDump()
,您可以使用实例invoke()
在 MBean 上的方法。ServerInfo
MBeanServer
此外,您可以使用相同的 MBeanServer 访问 MBean 的属性。
示例代码:
// imports
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.jboss.mx.util.MBeanServerLocator;
try {
MBeanServer server = MBeanServerLocator.locate();
ObjectName name = new ObjectName("jboss.system:type=ServerInfo");
// invoke the listThreadDump method and capture its output
String threadDumpHtml = (String) server.invoke(name, "listThreadDump", null, null);
// access a simple attribute of the ServerInfo object
String jvmName = (String) server.getAttribute(name, "JavaVMName");
} catch (Exception e) {
// Ideally catch the 3 exact exceptions
}
最后,当 MBean 公开一个“实例”属性时,我发现它很方便,因此您可以直接访问该对象,(CastToType) server.getAttribute(name, "instance")
而不是总是通过 MBeanServer。例如,在使用 JMS 时,拥有 ServerPeer 实例就很不错,因为您可以在队列和主题订阅者上获取消息计数器。