【发布时间】:2009-10-15 10:51:09
【问题描述】:
您好,我想使用浏览器监控 Java 应用程序,但同时利用现有的 JMX 基础架构。
我知道 JMX 提供了一个 HTTP 接口,但我认为它提供了一个标准的 web gui,并且不可能将其功能与现有系统混搭。
您知道 JMX 的任何 REST 接口吗?
我目前对谷歌的研究表明,有一个project 做了类似的事情。这是唯一的选择吗?
【问题讨论】:
您好,我想使用浏览器监控 Java 应用程序,但同时利用现有的 JMX 基础架构。
我知道 JMX 提供了一个 HTTP 接口,但我认为它提供了一个标准的 web gui,并且不可能将其功能与现有系统混搭。
您知道 JMX 的任何 REST 接口吗?
我目前对谷歌的研究表明,有一个project 做了类似的事情。这是唯一的选择吗?
【问题讨论】:
Jolokia 是一个新的(此时)JMX 代理,您可以安装在您的 JVM 中,并通过 HTTP 以 JSON 格式公开 MBeanServer。
【讨论】:
Tomcat 在其管理器应用程序中提供JMX Proxy Servlet。我不认为它完全是 REST,但它是无状态的,并且是由简单的 HTTP 请求构建的,所以它应该足够接近。
【讨论】:
为了后代,我最近在我的 SimpleJMX 包中添加了一个小型 Web 服务器。如果在类路径中,它将通过 Jetty 从平台 MBeanServer 向 HTTP 公开 bean。还有所有页面的文本版本,便于抓取。
// 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();
有一个little test program 显示它正在运行。这是从浏览器访问的java.lang:type=Memory 的图像。如您所见,输出是非常基本的 HTML。
【讨论】:
您可能想看看jmx4perl。它带有一个代理 servlet,它将 REST 请求代理到本地 JMX 调用并返回一个带有答案的 JSON 结构。它支持读取、写入、执行、列表(mbean 列表)和搜索操作,并且知道如何通过类似 XPath 的表达式深入研究复杂的数据结构。查看协议说明了解更多详情。
即将发布的版本也可以处理批量(== 一次多个)请求,并增加了发布 JSON 请求以替代纯 REST GET 请求的可能性。
在下一个版本中,将支持代理模式,因此不需要在目标平台上部署代理 servlet,而只需在中间代理服务器上部署。
【讨论】:
MX4J 是另一种选择。从它的主页下面引用 -
MX4J 是一个项目,旨在构建 Java(TM) 管理扩展 (JMX) 和 JMX Remote API (JSR 160) 规范的开源实现,并构建与 JMX 相关的工具。
【讨论】: