需要 MBean 接口的 JMX 客户端

JMX Client needing MBean interface

我是 JMX 技术的新手,如果我理解正确的话: 有两种方法可以调用 Mbean 上的操作:

1) 使用 MBeanServerConnection 的调用操作并使用 mbsc.invoke(name, operationName, params, signature)

以字符串形式提供方法名称

2) 使用 JMX.newMBeanProxy(connection, objectName, interfaceClass) 获取 MBean 接口并调用接口上的操作。

我的问题是,如果我想使用上面提到的第二种方法,我的客户端中是否也需要有Mbean 接口? Mbean 接口是我要监视的主要应用程序的源代码的一部分。我是否也需要将相同的 Mbean 接口复制到客户端代码中?

我没有best practice,因为决定取决于你的需要。

下面是我个人的看法。

mbsc.invoke(name, operationName, params, signature)

如果客户端应用程序不严格依赖于执行 MBean 的应用程序,则客户端应用程序不应依赖于接口。以 jconsole 实用程序为例。它可以调用所有公开的操作,而无需访问 mbean 接口 class.

JMX.newMBeanProxy(connection, objectName, interfaceClass)

如果客户端应用程序对执行 MBean 的应用程序有很强的依赖性(例如,您为应用程序提供 mbean,而客户端应用程序是您的支持工具),我会选择这个解决方案编译时检查的好处。