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

标签 tomcat jboss jmx monitor mbeans

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

这是 JConsole 中的 View 示例,以及我试图动态获取的内容。

JConsole Screenshot

下面是我编写的代码,它能够提取属性、已注册的域,但我似乎无法获取域中 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(new ObjectName(domain + ":*"), null)

这将获得实际的 MBean:

remote.queryMBeans(new ObjectName(domain + ":*"), null)

关于tomcat - 使用 Jython 提取针对 JMX 中的域注册的 MBean 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11849271/

相关文章:

java - 如何在 spring boot standalone app 中激活 JMX 监控

java - tomcat运行时NoSuchMethodError如何解决?

linux - 为什么 Mule 应用程序在 Linux 服务器中表现异常?

java - jboss as 7 在 webapp 初始化期间以编程方式查询管理端口

java - 如何在自定义 JMX 客户端中忽略 SSL 证书

java - 命令行是以编程方式配置 Wildfly 10 的唯一方法吗?

tomcat - 从 Tomcat 本身重新启动 Tomcat

java - 即使我把它放在 Java 选项中,Tomcat Permgen 也不会增加

java - JBoss 如何实现 HttpServletResponse setStatus() 与 sendError()

java - HASingleton 无法查找 JNDI bean