远程调用在tomcat上运行的MBean操作

远程调用在tomcat上运行的MBean操作,tomcat,rmi,jmx,Tomcat,Rmi,Jmx,我编写了一个MBean来获取所有运行线程的某些属性。在Tomcat上运行这个 .. public String dumpThreads() { ThreadMXBean threadMX = ManagementFactory.getThreadMXBean(); long[] allThreadIDs = threadMX.getAllThreadIds(); ThreadInfo[] threadsInfo = threadMX.getThr

我编写了一个MBean来获取所有运行线程的某些属性。在Tomcat上运行这个

..
public String dumpThreads() {

        ThreadMXBean threadMX = ManagementFactory.getThreadMXBean();
        long[] allThreadIDs = threadMX.getAllThreadIds();
        ThreadInfo[] threadsInfo = threadMX.getThreadInfo(allThreadIDs, 10);
        StringBuilder threadDumpSB = new StringBuilder();

        threadDumpSB.append ("THREAD DUMP - " + (new SimpleDateFormat ("dd-MMM-yyyy HH:mm:ss")).format(new Date()) );
        threadDumpSB.append ("\n\n");
        threadDumpSB.append ("Thread count: " + Integer.toString(threadsInfo.length) );
        threadDumpSB.append ("\n\n\n");

        for (ThreadInfo threadInfo : threadsInfo) {
            threadDumpSB.append ("ID: " + Long.toString(threadInfo.getThreadId()) + "\n");
            threadDumpSB.append ("Name: " + threadInfo.getThreadName() + "\n");
            threadDumpSB.append ("State: " + threadInfo.getThreadState() + "\n");
            StackTraceElement[] stacktraceElements = threadInfo.getStackTrace();
            for (StackTraceElement stElm : stacktraceElements) 
                threadDumpSB.append ("    at " + stElm.toString() + "\n");
            threadDumpSB.append ("\n");
        }

        return (threadDumpSB.toString());

    }
..
我可以通过jconsole在下面看到这一点:应用程序>服务器>服务器>操作,也可以通过http://servername:8080/manager/jmxproxy

Name: Application:Name=Server,Type=Server
modelerType: org.puneet.mbeans.Server
Uptime: 3156547
现在,我想远程执行dumpThreads方法

到目前为止,这就是我要去的地方:

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8008/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
我能够连接到服务器并获取mbean列表,等等。不知道如何获取mbean的句柄,然后调用dumpThreads操作

ObjectName mbeanName = new ObjectName("Application:Name=Server,Type=Server"); ...?
提前谢谢

Puneet

找到了答案

...
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
...
ObjectName mbeanName = new ObjectName("Application:Name=Server,Type=Server");
Object o = mbsc.invoke(mbeanName, "dumpThreads", null, null);
System.out.println(o);
...