2010-04-26 95 views
2

我有兩個Web應用程序。
兩者均使用oracle.ucp.UniversalConnectionPool
當我部署JBoss上我這些應用中得到以下異常:UniversalConnectionPoolManagerMBean已經註冊

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$3.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$2.run(UniversalConnectionPoolManagerMBeanImpl.java:141) 
    ... 215 more 

數據源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> 

有誰知道如何解決這個問題?

+0

我想在Tomcat上部署兩場戰爭並且遇到同樣的問題。如果我將ojdbc6.jar和ucp.jar文件複製到Tomcat/lib目錄中並將它們從我的戰爭中刪除,那麼我可以成功加載這兩個應用程序。兩個步驟都是必要的。但是,我不覺得這是一個可以接受的解決方案,我仍然在尋找一種更容易/更好的方式來處理這個問題。我使用Spring來配置我的數據源,但沒有看到更改名稱的方法:oracle.ucp.admin:name = UniversalConnectionPoolManagerMBean。我已經看到了解決方案,如果您正在手動完成此操作,但不是在Spring上下文中執行這些操作 – bjhale 2013-04-17 17:02:30

回答

0

您可能會嘗試不將jdbc驅動程序(ojdbc6.jar)作爲您的Web應用程序的一部分進行部署。相反,作爲JBoss jvm類路徑的一部分提供jdbc一次,將驅動程序jar放入<JBOSS_HOME>/server/default/lib

+1

我沒有將jdbc驅動程序部署爲Web應用程序的一部分。 我把ojdbc5.jar和ucp.jar都放到$ JBOSS_HOME/server/web/lib。但它沒有幫助。 – 2010-04-26 11:38:34

3

兩個池都試圖以相同名稱(「oracle.ucp.admin:name = UniversalConnectionPoolManagerMBean」)向JMX註冊。

如果你turn off他們的JMX功能,事情應該工作得很好。

+0

不幸的是,博客的鏈接被打破:( – 2015-02-27 15:04:42

0

在bean 如果設置池的名稱需要相同的名稱拋出已存在的錯誤

0

我想出了一個辦法做到這一點不

我加入這個dms.jar刪除此屬性彈簧豆:

豆ID = 「OracleJMXDisabler」 類= 「yourpackagename.OracleJMXDisabler」 初始化方法= 「初始化」

類看起來像這樣:

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

在我的數據源bean中,我添加了depends-on =「OracleJMXDisabler」,這樣它會首先被初始化。這是可行的,因爲UniversalConectionPoolManager是一個單例,每個應用程序上下文只有一個實例。

相關問題