如何使用 JMX API 获取 ObjectName 的子项

How to get children of ObjectName using JMX API

我需要获取应用程序服务器中可用资源的所有子对象(可用数据源列表)。 为此,我正在使用这段代码:

ObjectName name = new ObjectName("jboss.as:subsystem=datasources");
Set<ObjectInstance> instances = server.queryMBeans(name, null);

Iterator<ObjectInstance> iterator = instances.iterator();

while (iterator.hasNext()) {
    ObjectInstance instance = iterator.next();

    System.out.println("MBean Found:");
    System.out.println("Class Name:" + instance.getClassName());
    System.out.println("Object Name:" + instance.getObjectName());
}

但是,我只能检索“jboss.as:subsystem=datasources”的对象名称,但我需要找到该树下的可用数据源。我在 ObjectInstance 中找不到任何方法来深入研究它。 有帮助吗?

您可以查询 MBean 树并按名称过滤对象:

Set<ObjectInstance> instances = connection.queryMBeans(null, null);
Iterator<ObjectInstance> iterator = instances.iterator();

while (iterator.hasNext()) {
    ObjectInstance instance = iterator.next();
    if (instance.getObjectName().toString().startsWith("jboss.as:subsystem=datasources,data-source=") &&
            (!instance.getObjectName().toString().contains(",statistics")))
    System.out.println("Object Name:" + instance.getObjectName());

}

如果使用 remote+http 协议,请确保将 jboss-client JAR 包含在您的类路径中。 更多详情:How do I know the list of Datasources in JBoss