2

一个应用程序正在使用 JBoss 4.2.2,我发现有必要调用listThreadDump(),我希望它在ServerInfo.

我在想我需要找到这些信息的 jar 是 jboss-jmx.jar。

那么,我如何以编程方式通过调用类似的东西来复制所做的事情http://localhost:8080/jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.system:type=ServerInfo&methodName=listThreadDump

4

1 回答 1

3

这就是我访问 ServerInfo MBean 的方式。我用的是JBoss AS 5.1,但是这个方法应该是一样的。

要调用listThreadDump(),您可以使用实例invoke()在 MBean 上的方法。ServerInfoMBeanServer

此外,您可以使用相同的 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 实例就很不错,因为您可以在队列和主题订阅者上获取消息计数器。

于 2011-09-13T00:39:45.300 回答