Вот как я получил доступ к MBean ServerInfo. Я использую JBoss AS 5.1, но этот метод должен быть таким же.
Чтобы вызвать listThreadDump()
, вы можете invoke()
метод в ServerInfo
MBean с использованием экземпляра MBeanServer
.
Кроме того, вы можете получить доступ к атрибутам MBeans, используя тот же MBeanServer.
Пример кода:
// 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
}
Наконец, я нахожу удобным, когда MBeans предоставляет атрибут 'instance', поэтому вы можете обращаться к объекту напрямую (CastToType) server.getAttribute(name, "instance")
вместо того, чтобы всегда проходить через MBeanServer. Например, при использовании JMS удобно иметь экземпляр ServerPeer, поскольку вы можете получать счетчики сообщений в своих очередях и подписчиках тем.