开发者

Calling JBoss MBean functions to get threaddump

开发者 https://www.devze.com 2023-03-31 17:26 出处:网络
An application is using JBoss 4.2.2, and I have found it necessary to call listThreadDump(), and I expect it is in ServerInfo.

An application is using JBoss 4.2.2, and I have found it necessary to call listThreadDump(), and I expect it is in ServerInfo.

I am thinking the jar I need to find this information is jboss-jmx.jar.

So, how do I programmatically duplicate what is done by calling something similar to http://localhost:8080/jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.system:type=ServerInfo&methodName=listThreadDu开发者_运维百科mp?


This is how I have accessed the ServerInfo MBean. I'm using JBoss AS 5.1, but this method should be the same.

To call listThreadDump(), you can invoke() the method on the ServerInfo MBean using an MBeanServer instance.

Additionally, you can access attributes of MBeans using the same MBeanServer.

Sample code:

// 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
}

Finally, I find it handy when MBeans expose an 'instance' attribute, so you can then access the object directly (CastToType) server.getAttribute(name, "instance") instead of always going through the MBeanServer. For example, when using JMS, the ServerPeer instance is nice to have as you can get message counters on your queues and topic subscribers.

0

精彩评论

暂无评论...
验证码 换一张
取 消