调用JBoss MBean函数来获取线程转储

时间:2011-08-29 12:31:46

标签: jmx jdk1.5 mbeans jboss-4.2.x

一个应用程序正在使用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类似的东西以编程方式复制所做的事情?

1 个答案:

答案 0 :(得分:3)

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

要致电listThreadDump(),您可以使用invoke()实例ServerInfo 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 } 方法。

此外,您可以使用相同的MBeanServer访问MBean的属性。

示例代码:

(CastToType) server.getAttribute(name, "instance")

最后,当MBeans公开'instance'属性时,我发现它很方便,因此您可以直接访问对象{{1}},而不是总是通过MBeanServer。例如,在使用JMS时,ServerPeer实例很不错,因为您可以在队列和主题订阅者上获取消息计数器。