2011-08-29 63 views
2

一个应用程序使用JBoss 4.2.2,我发现它有必要调用listThreadDump(),我期望它在ServerInfo调用JBoss MBean函数来获取threaddump

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

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

回答

3

这就是我如何访问ServerInfo MBean。我使用的是JBoss AS 5.1,但这种方法应该是一样的。

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

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