1

我们的应用程序需要限制用户访问给定 MBean 的 JMX 属性和操作子集。例如,C3P0 MBean 公开了很多属性/操作。假设我们不希望用户更改最小池大小。因此,我们想在 JMX 控制台中抑制该属性的设置器。

查看 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 只会显示清晰的方法。然而,上面的配置暴露了所有原始的 Hibernate MBean 方法。

其次,C3P0 Mbean默认是暴露的,我不需要Spring bean来暴露。该 MBean 在控制台中显示为“PooledDataSource[2spw3u98bqgqeg1697gnx|73302995]”。我不确定为该 MBean 仅公开一部分属性和操作的正确方法是什么。

感谢您的帮助/指点。谢谢。

4

1 回答 1

0

如果 bean 是“真正的”MBean(实现<class>MBean),那么它会按原样导出。公开的属性/操作是该 MBean 的开发人员想要的。

根据JMX 规范,如果它还不是 MBean,MBeanInfoAssembler则仅用于为 bean 构造 a 。ModelMBean

您可以编写自己的 bean,hibernateStatisticsMBean仅代表您想要公开的方法。

根据您的描述,C3PO 似乎在 Spring 之外注册了自己的 MBean,因此如果不深入研究他们的代码以查看是否有某种方法可以禁用导出并再次使用委托 MBean,您将无能为力。

于 2015-03-18T12:56:58.513 回答