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
UniversalConnectionPoolManagerMBean already registered
提问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
回答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