Java 是否可以创建jmx子域?

Java 是否可以创建jmx子域?,java,jmx,Java,Jmx,我正在尝试动态创建MBean,它表示由应用程序中使用的框架创建的现有对象。这些对象存在于概念层次结构中,如文件夹层次结构。如果我只是创建带有关联文件夹路径的MBean,那么最终会得到一个包含大量对象的大域 如果我的JMX查看器(目前为VisualVM)能够看到与这些对象的文件夹层次结构相关联的域的“子文件夹”,那就太好了 是否有某种方法可以指定mbean的domain或name属性,以便JMX查看器可以看到这些对象的层次结构,而不仅仅是一个大的平面列表 是否有某种方法可以指定mbean的doma

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

如果我的JMX查看器(目前为VisualVM)能够看到与这些对象的文件夹层次结构相关联的域的“子文件夹”,那就太好了

是否有某种方法可以指定mbean的domain或name属性,以便JMX查看器可以看到这些对象的层次结构,而不仅仅是一个大的平面列表

是否有某种方法可以指定mbean的domain或name属性,以便JMX查看器可以看到这些对象的层次结构,而不仅仅是一个大的平面列表

有。您可以在
ObjectName
中指定不同的域,和/或在名称的
name=…
部分之前将文件夹指定为
X=Y
。例如:

... = new ObjectName("foo.com:00=folder,01=subFolder,name=SomeBean");
这将创建
SomeBean
托管JMXbean。它将显示在
foo.com
顶级域文件夹下。
foo.com
的内部将有一个名为
folder
的文件夹,其中有一个子文件夹名为
subFolder
。请参见jconsole中的下图:

bean的完整
ObjectName
在右侧可见。我使用
00=文件夹,01=子文件夹
文件夹名称约定。我不确定这些数字是否可见,但顺序很关键。
00
名称(在本例中为
文件夹
)是域下的文件夹。
01
名称是00文件夹中的文件夹(在本例中为
子文件夹
)。子文件夹的数量没有限制

如果您想要另一个与
文件夹
处于相同级别的文件夹,则只需使用不同的
00
名称:

... = new ObjectName("foo.com:00=folder2,name=AnotherBean");
作为旁白,您可能想看看我的,它为您完成所有JMX繁重的工作。这是我的建议。对于SimpleJMX,您可以使用
folderNames
注释字段指定文件夹:

@JmxResource(domainName = "j256.com", folderNames = { "counters" },
    beanName = "RuntimeCounter")

这将生成
ObjectName
“j256.com:00=counters,name=RuntimeCounter”

我注意到这个页面(),它似乎使用“type”属性来做类似的事情,尽管它没有显示它在JMX查看器中的显示方式。这个“子文件夹”的东西是在什么地方被记录下来的?我认为
“type”
只是一个名字。它可以是
t
,或者在我的例子中是
00
。据我所知,
00
除了它在@DavidM.Karr中的字母顺序外,从未被使用过。我不知道它在哪里被记录。当我自己@DavidM.Karr时,我必须找出字母数字顺序。ObjectName中键的名称对VisualVM或JConsole并不重要。您可以使用任何键名。它们只是为对象名称中的每个键创建“文件夹”。但是,键名称在单个ObjectName中必须是唯一的。例如,“foo.com:00=folder,name=someBean”将显示与“foo.com:Type=folder,name=someBean”相同的内容。我只是在“/”上拆分成一个数组(这是我的文件夹条目分隔符),并使用了一个值“0”+ctr(ctr从0到长度-1)。它只是起作用了。