Question

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=listThreadDump?

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top