Spring 3.2.3 MBeanExporter 不支持 bean 属性
Spring 3.2.3 MBeanExporter doesn't honor bean property
我通过 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 订阅 notificatios,我从未看到调用了 addNotificationListener 实现的方法。
通过调试查看 bean 代码,我从未看到任何 NotificationEmitter 方法被调用。而该 bean 的所有其他方法都按预期运行。
这个图MBeanExporter是做什么的?
设置 属性 assembler 的 MBeanExporter bean 时出现问题,特别是设置 属性 接口映射 汇编器。如果添加到 MBeanExporter 的 bean 的 class 名称和 assembler 中的接口名称不计算规则 interfaceName = className+"MBean" 一个实现了 NotificationEmitter 的新 MBean 被创建并注册到 MBeanServer 中。按照上述规则,由 MBeanExporter 提供的 bean 被注册。
这是因为 MBeanServer 在注册时,检查上面的规则,如果发现匹配,则抛出 NotCompliantMBeanException。
我通过 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 订阅 notificatios,我从未看到调用了 addNotificationListener 实现的方法。 通过调试查看 bean 代码,我从未看到任何 NotificationEmitter 方法被调用。而该 bean 的所有其他方法都按预期运行。 这个图MBeanExporter是做什么的?
设置 属性 assembler 的 MBeanExporter bean 时出现问题,特别是设置 属性 接口映射 汇编器。如果添加到 MBeanExporter 的 bean 的 class 名称和 assembler 中的接口名称不计算规则 interfaceName = className+"MBean" 一个实现了 NotificationEmitter 的新 MBean 被创建并注册到 MBeanServer 中。按照上述规则,由 MBeanExporter 提供的 bean 被注册。
这是因为 MBeanServer 在注册时,检查上面的规则,如果发现匹配,则抛出 NotCompliantMBeanException。