2010-04-26 4 views
2

У меня есть два веб-приложения.
Оба ига используют 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 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

ответ

0

Вы можете попытаться не развернуть драйвер jdbc (ojdbc6.jar) как часть ваших веб-приложений. Вместо того, чтобы обеспечить JDBC только один раз как часть виртуальной машины Java JBoss классам, поместив банку с драйверами в <JBOSS_HOME>/server/default/lib

+1

Я не развертываю драйвер jdbc как часть веб-приложений. Я поместил оба файла ojdbc5.jar и ucp.jar в $ JBOSS_HOME/server/web/lib. Но это не помогает. –

3

Оба бассейна пытаются зарегистрироваться JMX под тем же названием («oracle.ucp.admin: имя = UniversalConnectionPoolManagerMBean»).

Если у вас turn off их возможности JMX, все должно работать нормально.

+0

К сожалению, ссылка на блог не работает :( –

0

Удалить это свойство в вашем компоненте если вы установите имя пула, которое требуется такое же имя проливает уже существует ошибка

0

Я придумал способ сделать это без dms.jar

Я добавил этот весна фасоли:

боб ID = "OracleJMXDisabler" класс = "yourpackagename.OracleJMXDisabler" INIT-метод = "INIT"

класс выглядит следующим образом:

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

В моих фазах источника данных я добавил depend-on = "OracleJMXDisabler", чтобы он сначала инициализировался. Это работает, потому что UniversalConectionPoolManager является одноэлементным, и в каждом контексте приложения есть только один экземпляр.

Смежные вопросы