Вызов функций JBoss MBean для получения threaddump - PullRequest
2 голосов
/ 29 августа 2011

Приложение использует JBoss 4.2.2, и я считаю необходимым вызвать listThreadDump(), и я ожидаю, что оно находится в ServerInfo.

Я думаю, банку мне нужно найти этоинформация - jboss-jmx.jar.

Итак, как мне программно дублировать то, что делается, вызывая что-то похожее на http://localhost:8080/jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.system:type=ServerInfo&methodName=listThreadDump?

1 Ответ

3 голосов
/ 13 сентября 2011

Вот как я получил доступ к 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, поскольку вы можете получать счетчики сообщений в своих очередях и подписчиках тем.

...