oracle UniversalConnectionPoolManagerMBean 已经注册

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2712019/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-18 20:30:36  来源:igfitidea点击:

UniversalConnectionPoolManagerMBean already registered

oraclejbossconnection-pooling

提问by Volodymyr Bezuglyy

I have two web applications.
Both of yhem use oracle.ucp.UniversalConnectionPool.
When I deploy these applications on JBoss I get following exception:

我有两个网络应用程序。
两者都使用oracle.ucp.UniversalConnectionPool
当我在 JBoss 上部署这些应用程序时,出现以下异常:

java.sql.SQLException: Unable to start the Universal Connection Pool: java.sql.SQLException: Unable to start the Universal Connection Pool: oracle.ucp.UniversalConnectionPoolException: MBean exception occurred while registering or unregistering the MBean
    at oracle.ucp.util.UCPErrorHandler.newSQLException(UCPErrorHandler.java:541)
    at oracle.ucp.jdbc.PoolDataSourceImpl.throwSQLException(PoolDataSourceImpl.java:588)
    at oracle.ucp.jdbc.PoolDataSourceImpl.startPool(PoolDataSourceImpl.java:277)
    at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:647)
    at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:614)
    at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:608)
    at org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy.afterPropertiesSet(LazyConnectionDataSourceProxy.java:163)
...  
Caused by: java.sql.SQLException: Unable to start the Universal Connection Pool: oracle.ucp.UniversalConnectionPoolException: MBean exception occurred while registering or unregistering the MBean
    at oracle.ucp.util.UCPErrorHandler.newSQLException(UCPErrorHandler.java:541)
    at oracle.ucp.jdbc.PoolDataSourceImpl.throwSQLException(PoolDataSourceImpl.java:588)
    at oracle.ucp.jdbc.PoolDataSourceImpl.startPool(PoolDataSourceImpl.java:248)
    ... 212 more
Caused by: oracle.ucp.UniversalConnectionPoolException: MBean exception occurred while registering or unregistering the MBean
    at oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException(UCPErrorHandler.java:421)
    at oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException(UCPErrorHandler.java:389)
    at oracle.ucp.admin.UniversalConnectionPoolManagerMBeanImpl.getUniversalConnectionPoolManagerMBean(UniversalConnectionPoolManagerMBeanImpl.java:148)
    at oracle.ucp.jdbc.PoolDataSourceImpl.startPool(PoolDataSourceImpl.java:243)
    ... 212 more
Caused by: java.security.PrivilegedActionException: javax.management.InstanceAlreadyExistsException: oracle.ucp.admin:name=UniversalConnectionPoolManagerMBean already registered.
    at java.security.AccessController.doPrivileged(Native Method)
    at oracle.ucp.admin.UniversalConnectionPoolManagerMBeanImpl.getUniversalConnectionPoolManagerMBean(UniversalConnectionPoolManagerMBeanImpl.java:135)
    ... 213 more
Caused by: javax.management.InstanceAlreadyExistsException: oracle.ucp.admin:name=UniversalConnectionPoolManagerMBean already registered.
    at org.jboss.mx.server.registry.BasicMBeanRegistry.add(BasicMBeanRegistry.java:756)
    at org.jboss.mx.server.registry.BasicMBeanRegistry.registerMBean(BasicMBeanRegistry.java:233)
    at sun.reflect.GeneratedMethodAccessor75.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
    at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:138)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:90)
    at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:140)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:90)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
    at org.jboss.mx.server.MBeanServerImpl.run(MBeanServerImpl.java:1431)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.jboss.mx.server.MBeanServerImpl.registerMBean(MBeanServerImpl.java:1426)
    at org.jboss.mx.server.MBeanServerImpl.registerMBean(MBeanServerImpl.java:376)
    at oracle.ucp.admin.UniversalConnectionPoolManagerMBeanImpl.run(UniversalConnectionPoolManagerMBeanImpl.java:141)
    ... 215 more

Definition of data source bean:

数据源bean定义:

<bean id="oracleDataSource" class="oracle.ucp.jdbc.PoolDataSourceFactory" factory-method="getPoolDataSource">
    <!-- hard coded properties -->
    <property name="connectionFactoryClassName" value="oracle.jdbc.pool.OracleDataSource" />
    <property name="validateConnectionOnBorrow" value="true" />
    <property name="connectionPoolName" value="ORACLE_CONNECTION_POOL" />
...
</bean>

Does anyone know how to fix this problem?

有谁知道如何解决这个问题?

回答by otto.poellath

Both pools try to register with JMX under the same name ("oracle.ucp.admin:name=UniversalConnectionPoolManagerMBean").

两个池都尝试以相同的名称(“oracle.ucp.admin:name=UniversalConnectionPoolManagerMBean”)向 JMX 注册。

If you turn offtheir JMX capabilities, things should work just fine.

如果您关闭它们的 JMX 功能,事情应该可以正常工作。

回答by jovanchohan

I came up with a way to do it without the dms.jar

我想出了一种没有 dms.jar 的方法

I added this spring bean:

我加了这个春豆:

bean id="OracleJMXDisabler" class="yourpackagename.OracleJMXDisabler" init-method="init"

bean id="OracleJMXDisabler" class="yourpackagename.OracleJMXDisabler" init-method="init"

The class looks like this:

这个类看起来像这样:

public class OracleJMXDisabler
{
    public void init() throws UniversalConnectionPoolException
    {
        UniversalConnectionPoolManager manager = UniversalConnectionPoolManagerImpl.getUniversalConnectionPoolManager();
        manager.setJmxEnabled(false);
    }
}

In my datasource beans I added depends-on=”OracleJMXDisabler” so that it would get initialized first. This works because the UniversalConectionPoolManager is a singleton and there is only one instance of it per application context.

在我的数据源 bean 中,我添加了depends-on=”OracleJMXDisabler”,以便它首先被初始化。这是有效的,因为 UniversalConectionPoolManager 是一个单例,并且每个应用程序上下文只有一个实例。

回答by sudheer kosuru

Remove this property in your bean if you set pool name it takes same name throws already exist's error

如果您设置池名称,则在您的 bean 中删除此属性,它采用相同的名称引发已存在的错误

回答by Oliver Michels

You may try to not deploy the jdbc driver (ojdbc6.jar) as part of your web-apps. Instead provide the jdbc only once as part of the JBoss jvm classpath, placing the driver jar into <JBOSS_HOME>/server/default/lib

您可以尝试不将 jdbc 驱动程序 (ojdbc6.jar) 部署为 Web 应用程序的一部分。而是只提供一次 jdbc 作为 JBoss jvm 类路径的一部分,将驱动程序 jar 放入<JBOSS_HOME>/server/default/lib