我们的应用程序要求限制用户访问给定MBean的JMX属性和操作的子集。例如,C3P0 MBean暴露了许多属性/操作。假设我们不希望用户更改最小池大小。因此,我们希望在JMX控制台中抑制该属性的setter。
看着Spring文档,我认为这是可能的:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jmx.html
以下是我与Hibernate MBean的幽会:
<bean id="hibernateStatisticsMBean" class="org.hibernate.jmx.StatisticsService">
<property name="statisticsEnabled" value="true" />
<property name="sessionFactory" value="#{myEntityManagerFactory.sessionFactory}" />
</bean>
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
<property name="locateExistingServerIfPossible" value="true" />
</bean>
<bean id="jmxExporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
<property name="server" ref="mbeanServer" />
<property name="beans">
<map>
<entry key="Hibernate:name=hibernateStatistics" value-ref="hibernateStatisticsMBean" />
</map>
</property>
<property name="assembler">
<bean class="org.springframework.jmx.export.assembler.MethodNameBasedMBeanInfoAssembler">
<property name="managedMethods">
<list>
<value>clear</value>
</list>
</property>
</bean>
</property>
</bean>
我希望在JMX控制台中只显示Hibernate MBean的clear方法。然而,上面的配置公开了所有原始的Hibernate MBean方法。
其次,C3P0 Mbean是默认公开的,我不需要Spring bean来公开它。那个Mbean在控制台中显示为"PooledDataSource[2spw3u98bqgqeg1697gnx|73302995]"。我不确定什么是只公开属性子集的正确方式&该MBean的操作。
感谢您的帮助/指点。谢谢
如果bean是"true"MBean(实现<class>MBean
),则按原样导出。公开的属性/操作是该MBean的开发人员想要的。
MBeanInfoAssembler
仅用于为bean构造ModelMBean
,如果它根据JMX规范还不是MBean的话。
您可以编写自己的bean,将其委托给hibernateStatisticsMBean
,只用于您想要公开的方法。
根据您的描述,C3PO似乎在Spring之外注册了自己的MBean,所以如果不深入研究他们的代码,看看是否有办法禁用导出,并再次使用委派MBean,您就无法在那里做任何事情。