是否有可用的JMX - REST桥接器?

20

嗨,我想使用浏览器监视Java应用程序,同时利用现有的JMX基础设施。

我知道JMX提供HTTP界面,但我认为它提供的是标准的Web图形用户界面,不可能将其功能与现有系统混合。

您是否了解JMX的任何REST接口?

我目前在Google上的研究显示有一个项目可以实现类似的功能。这是唯一的选择吗?

5个回答

23

Jolokia是一款新的JMX代理程序,可安装在您的JVM中,并以JSON格式通过HTTP公开MBean服务器。


3

Tomcat 在其管理应用程序中提供了一个JMX代理Servlet。我认为它并不完全是REST,但它是无状态的,并且是由简单的HTTP请求构建的,因此应该足够接近。


Tomcat JMX代理不支持JSON、XML或其他编码类型。实际上,它不支持头部中的Accept键。 - Mostafa Barmshory

2

为了记录,我最近在我的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。

enter image description here


我非常喜欢这个项目,但值得指出的是连接器在Jetty 9上不起作用,因此请使用Jetty 8。 - Shawn Vader
所以我尝试在SimpleJMX版本1.10 @ShawnVader中添加Jetty 9支持。猜测它不起作用?不幸的是,我没有Java 7,因此无法自行测试9。如果您希望我帮助您使其正常工作,请通过http://256.com/gray/email/与我联系。 - Gray

1

你可能想看一下jmx4perl。它带有一个代理servlet,可以将REST请求代理到本地的JMX调用并返回一个包含答案的JSON结构。它支持读取、写入、执行、列表(MBeans列表)和搜索操作,并且知道如何通过类似于XPath的表达式深入到复杂的数据结构中。请查看协议描述以获取更多详细信息。

即将推出的版本还可以处理批量(==多个)请求,并添加了以纯REST GET请求的替代方式发布JSON请求的可能性。

在接下来的几个版本中,将支持代理模式,以便无需在目标平台上部署代理servlet,而只需在中间代理服务器上部署。


1

MX4J是另一种选择。以下是引用自其主页的内容 -

MX4J是一个项目,旨在构建Java(TM)管理扩展(JMX)和JMX远程API(JSR 160)规范的开源实现,并构建与JMX相关的工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接