是否可以创建jmx子域?

Dav*_*arr 4 java jmx

我正在尝试动态创建mbeans,它代表由我的应用程序中使用的框架创建的现有对象.这些对象存在于概念层次结构中,如文件夹层次结构.如果我只是创建带有相关文件夹路径的mbeans,我最终得到一个包含大量对象的大域.

如果我的JMX查看器(目前是VisualVM)可以看到与这些对象的文件夹层次结构相关联的域的"子文件夹",那将是非常好的.

有没有办法指定mbean的域或名称属性,以便JMX查看器可以看到这些对象的层次结构,而不仅仅是一个大的平面列表?

Gra*_*ray 12

有没有办法指定mbean的域或名称属性,以便JMX查看器可以看到这些对象的层次结构,而不仅仅是一个大的平面列表?

就在这里.您可以在您指定一个不同的域ObjectName和/或可以指定文件夹,X=Y 之前name=...名字的一部分.例如:

... = new ObjectName("foo.com:00=folder,01=subFolder,name=SomeBean");
Run Code Online (Sandbox Code Playgroud)

这将创建SomeBean托管JMX bean.它将显示在foo.com顶级域文件夹下.里面foo.com将是一个名为的文件夹folder,在其中,一个名为的子文件夹subFolder.从jconsole看下面的图片:

在此输入图像描述

ObjectName右边可以看到满满的豆子.我使用00=folder,01=subfolder文件夹名称约定.我不确定数字是否完全可见,但订单是关键的.的00名称(在该例子中folder)是域下的文件夹.该01名称是文件夹00内的文件夹(在本示例中subfolder).子文件夹的数量没有限制.

如果您想要与同一级别的其他文件夹,folder则只需使用其他00名称:

... = new ObjectName("foo.com:00=folder2,name=AnotherBean");
Run Code Online (Sandbox Code Playgroud)

顺便说一下,你可能想看一下我的SimpleJMX包装,它可以为你完成所有JMX繁重的工作.这是您享受示例程序.使用SimpleJMX,您可以使用folderNames注释字段指定文件夹:

@JmxResource(domainName = "j256.com", folderNames = { "counters" },
    beanName = "RuntimeCounter")
Run Code Online (Sandbox Code Playgroud)

这产生ObjectName"j256.com:00=counters,name=RuntimeCounter".

  • ObjectName 中键的名称与 VisualVM 或 JConsole 无关。您可以使用任何键名。他们只是为对象名称中的每个键创建“文件夹”。但是,键名在单个 ObjectName 中必须是唯一的。例如,“foo.com:00=folder,name=someBean”将显示与“foo.com:Type=folder,name=someBean”相同的内容。 (2认同)