最近我进入了JMX的世界,尝试对我们的应用程序进行测试,并通过定制的JMXClient公开一些操作。我们已经完成了确定如何对类进行测试而不必对现有代码进行太多改动的工作。我使用DynamicMBean实现完成了这个任务。具体来说,我创建了一组注释,我们用它来装饰我们的类。然后,当创建对象(或者如果它们被用作静态类时被初始化),我们通过一个静态类将它们注册到我们的MBeanServer中,该静态类为类创建一个dynamicMBean并注册它。当我们只使用JConsole或VisualVM时,这已经非常成功。我们可以执行操作并查看所有可能的字段状态。我的问题更倾向于创建像JConsole一样的半实时JMXClient。如何进行JMX客户端轮询
我在这里面临的最大问题是如何使JMXClient以接近实时的方式报告字段状态,因为我可以合理获取,而无需修改工具库来推送通知(例如,在setter某些类的方法,设置字段,然后发出JMX通知)。我们希望这些课程几乎完全不知道他们正在装备。如果在检查属性时检出JConsole,则屏幕底部会有一个刷新按钮,用于刷新属性值。它向您显示的值是在该属性加载到视图中时检索到的值,并且不会在不使用刷新按钮的情况下更改。我希望这个发生在自己身上。
我写了一个小的UI,它显示了一些关于连接状态的数据,以及一些仪器化类的一些字段。为了使这些值反映当前状态,我有一个线程在后台旋转。线程每隔一秒左右尝试获取我感兴趣的字段的当前值,然后UI将得到更新。我不太喜欢这个解决方案,因为编写更新底层模型的逻辑很棘手。甚至更难以更新用户界面的方式不会导致奇怪的错误(使用Swing)。
我也可以在应用程序端编写JMXAgent的附加部分,其中一个线程通过已注册的DynamicMBeans列表运行,确定它们的属性值是否发生更改,然后推送通知( S)。这会将通知逻辑从仪表库中移出,但仍然会给应用程序带来更多负担:(。
我只是想知道你们中的任何一个人是否已经处于JMX或其他位置,并且可以引导我的设计方法为JMXClient还是真的任何其他意见,可以使这个解决方案比我有更优雅的方向是正确的。
你们已经将不胜感激任何建议。
仅供参考:如果您在jconsole中绘制数值,它会每两秒钟自动刷新一次。 – Gray