我正在尝试动态创建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".