Tomcat 使用Jython提取针对JMX中的域注册的MBean列表

Tomcat 使用Jython提取针对JMX中的域注册的MBean列表,tomcat,jboss,jmx,monitor,mbeans,Tomcat,Jboss,Jmx,Monitor,Mbeans,如果我知道MBean的名称,我就能够获得属性信息,但是我试图监视的应用程序会生成随机命名的MBean,因此需要能够查询JMX以获得在域中注册的MBean列表 下面是JConsole中视图的一个示例,以及我试图动态获取的内容 下面是我编写的代码,它能够提取属性、注册的域,但我似乎无法得到域中MBean的实际列表 import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnec

如果我知道MBean的名称,我就能够获得属性信息,但是我试图监视的应用程序会生成随机命名的MBean,因此需要能够查询JMX以获得在域中注册的MBean列表

下面是JConsole中视图的一个示例,以及我试图动态获取的内容

下面是我编写的代码,它能够提取属性、注册的域,但我似乎无法得到域中MBean的实际列表

    import javax.management.remote.JMXConnector;
    import javax.management.remote.JMXConnectorFactory;
    import javax.management.remote.JMXServiceURL;
    import java.lang.management.ManagementFactory;

    import sys, cmd, socket, optparse
    from urlparse import urljoin
    from cmd import Cmd

    def get_connection(host, port):
        serviceURL = str()
        serviceURL = "service:jmx:rmi:///jndi/rmi://"
        serviceURL = serviceURL + host + ":" + str(port) + "/jmxrmi"

        url =  javax.management.remote.JMXServiceURL(serviceURL);
        connector = javax.management.remote.JMXConnectorFactory.connect(url);
        global remote
        remote = connector.getMBeanServerConnection();


    def get_domain_list():
        domainList = []
        get_connection('dt2apps2102', 8004)
        domainList = remote.getDomains()
        return domainList

    def print_domain_list():
        domainList = get_domain_list()
        for element in domainList:
            print element

    def get_domain_objects(domain):
        pass

    def get_object_list():
        dmiDomains = {}
        domainList = get_domain_list()
        for element in domainList:
            if element in ('SystemJobControl', 'MediaStore', 'fabric'):
                dmiDomains[element] = None
        return dmiDomains

    def get_attribute(domain, mbean, attribute):
        obn = javax.management.ObjectName(domain + ':' + 'name=' + mbean)
        return remote.getAttribute(obn, attribute)

    print get_object_list()
    get_object_list()

这将为您提供所有对象的名称:

remote.queryNames(新对象名(域+“:*”),null)

这将得到实际的MBean:

remote.queryMBeans(新对象名(域+“:*”,null)

打印get\u属性('SystemJobControl','listeners','ListenerEventsProcessed')>>294L