jmx mbean 服务器在更改 c3p0 版本时抛出 InstanceAlreadyExistsException
jmx mbean server throw InstanceAlreadyExistsException when change c3p0 version
c3p0-0.9.1.2
和 c3p0-0.9.5
之间有什么区别,这意味着当我想在 0.9.1.2
中用 DynamicPooledDataSourceManagerMBean
注册一个 MBean
时,一切都很好,但是当我使用 0.9.5
然后 com.sun.jmx.mbeanserver.Repository
抛出一个 javax.management.InstanceAlreadyExistsException
.
我使用 spring 作为我的容器,所以 DynamicPooledDataSourceManagerMBean
的 bean 定义是这样的:
<bean id="register" class="com.mchange.v2.c3p0.management.DynamicPooledDataSourceManagerMBean">
<constructor-arg index="0" ref="dataSource"/>
<constructor-arg index="1" value="my.pool.connection:type=c3p0,name=Main"/>
<constructor-arg index="2" ref="mbeanServer"/>
</bean>
其中数据源引用定义是 com.mchange.v2.c3p0.ComboPooledDataSource
并且定义如下:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" lazy-init="true" >
and a lot of datasource config
而 mbeanSever
是一个 Spring org.springframework.jmx.support.MBeanServerFactoryBean
,其定义如下:
<bean name="mbeanServer"
class="org.springframework.jmx.support.MBeanServerFactoryBean">
<property name="locateExistingServerIfPossible" value="true" />
<property name="registerWithFactory" value="true"></property>
</bean>
正如@SteveWaldman 所说,问题是我试图将我的数据源注册到 c3p0 之前注册的 MBean 服务器中。所以我应该做的是什么。
但是需要对 c3p0 注册的内容进行一些修改。
c3p0 使用这样的名称注册数据源:
com.mchange.v2.c3p0:type=PooledDataSource,identityToken=1hgeowz961y14x0ldebkgx|123f9b8,name=Main
我想避免添加 identityToken,所以如前所述 here 我创建了一个 c3p0.properties 文件并将这一行放入其中:
com.mchange.v2.c3p0.management.ExcludeIdentityToken=true
这几乎就是我为我的案子所做的一切。感谢@StevenWaldman。
c3p0-0.9.1.2
和 c3p0-0.9.5
之间有什么区别,这意味着当我想在 0.9.1.2
中用 DynamicPooledDataSourceManagerMBean
注册一个 MBean
时,一切都很好,但是当我使用 0.9.5
然后 com.sun.jmx.mbeanserver.Repository
抛出一个 javax.management.InstanceAlreadyExistsException
.
我使用 spring 作为我的容器,所以 DynamicPooledDataSourceManagerMBean
的 bean 定义是这样的:
<bean id="register" class="com.mchange.v2.c3p0.management.DynamicPooledDataSourceManagerMBean">
<constructor-arg index="0" ref="dataSource"/>
<constructor-arg index="1" value="my.pool.connection:type=c3p0,name=Main"/>
<constructor-arg index="2" ref="mbeanServer"/>
</bean>
其中数据源引用定义是 com.mchange.v2.c3p0.ComboPooledDataSource
并且定义如下:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" lazy-init="true" >
and a lot of datasource config
而 mbeanSever
是一个 Spring org.springframework.jmx.support.MBeanServerFactoryBean
,其定义如下:
<bean name="mbeanServer"
class="org.springframework.jmx.support.MBeanServerFactoryBean">
<property name="locateExistingServerIfPossible" value="true" />
<property name="registerWithFactory" value="true"></property>
</bean>
正如@SteveWaldman 所说,问题是我试图将我的数据源注册到 c3p0 之前注册的 MBean 服务器中。所以我应该做的是什么。 但是需要对 c3p0 注册的内容进行一些修改。 c3p0 使用这样的名称注册数据源:
com.mchange.v2.c3p0:type=PooledDataSource,identityToken=1hgeowz961y14x0ldebkgx|123f9b8,name=Main
我想避免添加 identityToken,所以如前所述 here 我创建了一个 c3p0.properties 文件并将这一行放入其中:
com.mchange.v2.c3p0.management.ExcludeIdentityToken=true
这几乎就是我为我的案子所做的一切。感谢@StevenWaldman。