我正在寻找一种解决方案,用于从中央 MBean 服务器中的不同 Java VM 注册 MBean 或整个 MBean 服务器本身,该服务器也应该在单独的 VM 中运行。目标是只有一个中央 MBean 服务器,其中包含整个系统的所有 MBean。
一个额外的要求是,这就是困难:-),“客户端”MBean 服务器必须连接/注册到中央 MBean 服务器,而不是相反。中央 MBean 服务器不需要任何“客户端”MBean 服务器的知识即可注册。
我只找到了 JMX 示例,其中“主”MBean 服务器连接到“客户端”MBean 服务器并获取其注册的 MBean,但没有找到其他方式。不幸的是,用于注册您自己的 MBean 的 registerMBean() 方法仅适用于本地 MBean 服务器,而不适用于 MBeanServerConnection 上的远程 MBean 服务器。在那里,只能使用 createMbean() 方法,这里的问题是,它可以在远程 MBean 服务器中注册 MBean,但随后您必须使用不同的对象,一个是本地对象,另一个是远程 MBean 服务器中的对象。所以现在的问题是,当本地对象发生某些更改时,这些更改仅存在,远程 MBean 服务器中注册的 MBean 不会获得这些更改(变量的新值...)。到目前为止,我唯一的解决方案是创建一个循环来注销远程服务器中的 MBean 并创建新的 MBean,以获取对象的实际值。这非常难看,而且对于性能来说也不太好。
我希望有人能给我一个提示,我怎样才能以更好的方式做到这一点。
The OpenDMK提供了一个完整的方法来做到这一点,使用级联服务。从文档中:
级联服务使您能够访问子代理的 MBean
直接通过主代理的 MBean 服务器。级联式
Java 动态管理工具包中的服务已被彻底修改
(Java DMK) 5.1 允许其通过连接器协议进行操作
由 Java 管理扩展 (JMX) 远程 API 定义。遗产
级联服务现已弃用。遗产的例子
由于以下原因,第 25 章保留了级联服务:
向后兼容性。但是,当使用旧版 Java DMK 时
连接器,您应该使用带有包装的新 CasdingServiceMBean
旧版连接器而不是依赖已弃用的旧版
级联代理API。
该库中有一些有趣的细节,预计将被纳入 JMX 2.0 中的标准 Java SE 中。我认为级联服务就是其中之一。一旦您了解了它的工作原理,您可能会得出结论,您可以自己实现它,尽管 OpenDMK 确实解决了一些棘手的极端情况。我不确定该项目有多活跃,但该软件看起来很稳定。
您可以找到文档集here。此外,我创建了一个包的 Mavenized 项目构建here.
//尼古拉斯
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)