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