0
在Spring 3.1中,我试图通过两个不同的bean名称和两个不同的接口通过JMX导出相同的bean。Spring JMX可以在两个不同的bean名称下导出同一个bean实例吗?
下面是一些例子Spring XML配置显示什么,我试图做的:
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="beans">
<map>
<entry key="internal:name=internalName" value-ref="myBean"/>
<entry key="external:name=externalName" value-ref="myBean"/>
</map>
</property>
<property name="assembler">
<bean class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
<property name="interfaceMappings">
<props>
<prop key="internal:name=internalName">InternalMXBean</prop>
<prop key="external:name=externalName">ExternalMXBean</prop>
</props>
</property>
</bean>
</property>
为myBean同时实现了我试图通过JMX的接口。
然而,当我开始我的应用程序得到的异常
javax.management.InstanceAlreadyExistsException: MXBean already registered with name internal:name=internalName
是否有在两个不同的MBean名称注册同一个bean实例暴露不同的接口的方法吗?
你真的想这样做吗?这不会造成混淆吗?如果你的类正在实现两个接口,也许你应该把它分成两个类。您可以创建另一个集成这两个实例的类,因此不需要更改其他代码。 – SpaceTrucker
我想这样做的原因是让同一个bean公开一个用于客户/外部使用的MXBean,以及一个用于内部/支持使用的MXBean。 InternalMXBean接口扩展了ExternalMXBean接口。我无法分开这个bean类,并且真的不想编写额外的代码来处理不同的接口。 – Mark