0

我通过 Spring MBeanExporter 导出了一个 bean,这个 bean 实现了 NotificationEmitter 并且表现得像一个 NotificationBroadcasterSupport。因此它采用了 public MBeanNotificationInfo[] getNotificationInfo() 方法,返回一个 MBeanNotificationInfo[] 的静态实例,该实例包含它自己的 notifTypes,只有一个带点注释的字符串。通过 jconsole 看这个 bean,而不是配置的 notifTypes,我看到:

ModelMBeanNotificationInfo: GENERIC ... Types: jmx.modelmbean.generic
ModelMBeanNotificationInfo: ATTRIBUTE_CHANGE ... Types: jmx.attribute.change

此外,如果我通过 jconsole 订阅通知,我永远不会看到 addNotificationListener 实现的方法已被调用。通过调试查看 bean 代码,我从未看到调用过任何 NotificationEmitter 方法。虽然该 bean 的所有其他方法都按预期运行。MBeanExporter 这个图是做什么的?

4

1 回答 1

0

设置MBeanExporter bean的属性assembler会出现问题,特别是设置assembler的属性interfaceMappings。如果添加到MBeanExporter的 bean 的类名和组装器中的接口名称不计算规则 interfaceName = className+“MBean”,则创建实现NotificationEmitter的新 MBean并将其注册到 MBeanServer 中。按照上述规则,注册了MBeanExporter提供的 bean 。 这是因为MBeanServer在注册时,检查上述规则并抛出NotCompliantMBeanException
如果它发现不匹配。

于 2017-07-15T17:07:10.323 回答