2

アプリケーションはJBoss4.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

これが私がServerInfoMBeanにアクセスした方法です。JBoss AS 5.1を使用していますが、この方法は同じである必要があります。

を呼び出すには、インスタンスを使用してMBeanのメソッドをlistThreadDump()実行できます。invoke()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が「instance」属性を公開するときに便利だと思います。そのため(CastToType) server.getAttribute(name, "instance")、常にMBeanServerを経由するのではなく、オブジェクトに直接アクセスできます。たとえば、JMSを使用する場合、キューとトピックサブスクライバーでメッセージカウンターを取得できるため、ServerPeerインスタンスがあれば便利です。

于 2011-09-13T00:39:45.300 に答える