【问题标题】:Third Party MBEANS operations management第三方 MBeans 运营管理
【发布时间】:2014-06-25 06:52:27
【问题描述】:

我有一个 spring 项目,其中有我的自定义 mbean(由用户定义)和 jar 提供的 mbean。如果我不必公开自定义 mbean 的少量操作,我可以将 mathod 名称值放在汇编器中的属性下:ignoreMethods。 我的问题是:如果我不必公开已经公开的第三方jar mbean的方法,我该怎么办?

【问题讨论】:

    标签: java spring mbeans spring-jmx


    【解决方案1】:

    如果第三方 jar 自己在内部向 MBeanServer 注册 MBean,则您无法控制。如果您使用 Spring 公开 MBean,那么您可以控制公开的内容。

    编辑:

    如果您使用<context:mbean-export/>,它会创建一个AnnotationMBeanExporter,默认情况下会自动检测匹配MBean命名规则的类。

    您可以通过将导出器声明为<bean/> 并将其autoDectedMode 设置为0 或将autoDetectModeName 设置为AUTODETECT_NONE 来关闭它。

    【讨论】:

    • 在第三方 jar 中,我没有找到任何 context.xml(反编译后)。如果接口名称以“ClassNameMBean”结尾并且实现类名称为“ClassName”,那么mbean服务器会自动将该类注册为jar中的mbean吗?
    • 它不会注册不在应用程序上下文中的 MBean。但是,第三方 jar 可能正在注册 MBean 本身(使用 java 代码)。当然,如果您为遵循 MBean 命名约定的第三方类定义 <bean/>,是的,它将被注册,但我编辑了答案以显示如何禁用它。