您好我想使用浏览器监控 Java 应用程序,但同时利用现有的 JMX 基础设施。
我知道 JMX 提供了一个 HTTP 接口,但我认为它提供了一个标准的 web gui,并且不可能将其功能与现有系统混搭。
您知道 JMX 的任何 REST 接口吗?
我对谷歌的研究目前表明有一个项目 做类似的事情。这是唯一的选择吗?
Jolokia是一个新的(目前)JMX 代理,您可以安装在 JVM 中,并通过 HTTP 以 JSON 格式公开 MBeanServer。
Tomcat在其管理器应用程序中提供了一个JMX 代理 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();
有一个小测试程序显示它在运行中。这是java.lang:type=Memory
从浏览器访问的图像。如您所见,输出是非常基本的 HTML。
MX4J是另一种选择。下面引用它的主页-
MX4J 是一个构建 Java(TM) 管理扩展 (JMX) 和 JMX Remote API (JSR 160) 规范的开源实现以及构建与 JMX 相关的工具的项目。
您可能想看看jmx4perl。它带有一个代理 servlet,它将 REST 请求代理到本地 JMX 调用并返回一个带有答案的 JSON 结构。它支持读取、写入、执行、列表(mbean 列表)和搜索操作,并且知道如何通过类似 XPath 的表达式深入研究复杂的数据结构。查看协议描述以获取更多详细信息。
即将发布的版本也可以处理批量(== 一次多个)请求,并增加了发布 JSON 请求以替代纯 REST GET 请求的可能性。
在下一个版本中,将支持代理模式,因此不需要在目标平台上部署代理 servlet,而只需在中间代理服务器上部署。