2012-10-03 35 views
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实例暴露不同的接口的方法吗?

+0

你真的想这样做吗?这不会造成混淆吗?如果你的类正在实现两个接口,也许你应该把它分成两个类。您可以创建另一个集成这两个实例的类,因此不需要更改其他代码。 – SpaceTrucker

+0

我想这样做的原因是让同一个bean公开一个用于客户/外部使用的MXBean,以及一个用于内部/支持使用的MXBean。 InternalMXBean接口扩展了ExternalMXBean接口。我无法分开这个bean类,并且真的不想编写额外的代码来处理不同的接口。 – Mark

回答

0

Can you register the same MBean with more than one name?表示您可以使用不同的名称注册相同的MBean,但提供了一些推理说明为什么这可能是一个坏主意。

在我的具体情况下,我使用MXBeans。相同的MXBean不能在不同的对象名称下注册,因为这会与对MXBean引用的支持相冲突。

相关问题