嗨,我想使用浏览器监视Java应用程序,同时利用现有的JMX基础设施。
我知道JMX提供HTTP界面,但我认为它提供的是标准的Web图形用户界面,不可能将其功能与现有系统混合。
您是否了解JMX的任何REST接口?
我目前在Google上的研究显示有一个项目可以实现类似的功能。这是唯一的选择吗?
Tomcat 在其管理应用程序中提供了一个JMX代理Servlet。我认为它并不完全是REST,但它是无状态的,并且是由简单的HTTP请求构建的,因此应该足够接近。
为了记录,我最近在我的SimpleJMX包中添加了一个小型Web服务器。如果在类路径中,它通过Jetty将平台MBeanServer中的bean暴露给HTTP。所有页面也有文本版本,易于抓取。
// create a new JMX server listening on a specific port
JmxServer jmxServer = new JmxServer(8000);
jmxServer.start();
// register any beans to jmx as necessary
jmxServer.register(someObj);
// create a web server publisher listening on a specific port
JmxWebServer jmxWebServer = new JmxWebServer(8080);
jmxWebServer.start();
这里有一个展示其操作的小测试程序。下面是通过浏览器访问java.lang:type=Memory
的图片,可以看到输出是非常基础的HTML。
你可能想看一下jmx4perl。它带有一个代理servlet,可以将REST请求代理到本地的JMX调用并返回一个包含答案的JSON结构。它支持读取、写入、执行、列表(MBeans列表)和搜索操作,并且知道如何通过类似于XPath的表达式深入到复杂的数据结构中。请查看协议描述以获取更多详细信息。
即将推出的版本还可以处理批量(==多个)请求,并添加了以纯REST GET请求的替代方式发布JSON请求的可能性。
在接下来的几个版本中,将支持代理模式,以便无需在目标平台上部署代理servlet,而只需在中间代理服务器上部署。
MX4J是另一种选择。以下是引用自其主页的内容 -
MX4J是一个项目,旨在构建Java(TM)管理扩展(JMX)和JMX远程API(JSR 160)规范的开源实现,并构建与JMX相关的工具。