3 Stimmen

UniversalConnectionPoolManagerMBean bereits registriert

Ich habe zwei Webanwendungen.
Beide verwenden oracle.ucp.UniversalConnectionPool.
Wenn ich diese Anwendungen auf JBoss bereitstelle, erhalte ich folgende Ausnahme:

java.sql.SQLException: Universal Connection Pool kann nicht gestartet werden: java.sql.SQLException: Universal Connection Pool kann nicht gestartet werden: oracle.ucp.UniversalConnectionPoolException: MBean-Ausnahme ist aufgetreten beim Registrieren oder Deregistrieren des MBeans
    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)
...  
Ursache: java.sql.SQLException: Universal Connection Pool kann nicht gestartet werden: oracle.ucp.UniversalConnectionPoolException: MBean-Ausnahme ist aufgetreten beim Registrieren oder Deregistrieren des MBeans
    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
Ursache: oracle.ucp.UniversalConnectionPoolException: MBean-Ausnahme ist aufgetreten beim Registrieren oder Deregistrieren des MBeans
    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
Ursache: java.security.PrivilegedActionException: javax.management.InstanceAlreadyExistsException: oracle.ucp.admin:name=UniversalConnectionPoolManagerMBean ist bereits registriert.
    at java.security.AccessController.doPrivileged(Native Method)
    at oracle.ucp.admin.UniversalConnectionPoolManagerMBeanImpl.getUniversalConnectionPoolManagerMBean(UniversalConnectionPoolManagerMBeanImpl.java:135)
    ... 213 more
Ursache: javax.management.InstanceAlreadyExistsException: oracle.ucp.admin:name=UniversalConnectionPoolManagerMBean ist bereits registriert.
    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

Definition des Datenquellen-Beans:

...

Kennt jemand eine Lösung für dieses Problem?

0 Stimmen

Ich versuche, zwei Kriege auf Tomcat zu implementieren und habe das gleiche Problem. Wenn ich die ojdbc6.jar und ucp.jar-Dateien in das Tomcat/lib-Verzeichnis kopiere UND sie aus meinen Kriegen entferne, kann ich beide Apps erfolgreich laden. Beide Schritte sind notwendig. Allerdings finde ich das keine akzeptable Lösung und suche immer noch nach einem einfacheren / besseren Weg, dies zu handhaben. Ich verwende Spring, um meine Datenquelle zu konfigurieren, und sehe keinen Weg, den Namen zu ändern: oracle.ucp.admin: name = UniversalConnectionPoolManagerMBean. Ich habe Lösungen gesehen, wenn Sie dies manuell machen, aber nicht aus einem Spring-Kontext heraus.

3voto

otto.poellath Punkte 3949

Beide Pools versuchen, sich unter dem gleichen Namen ("oracle.ucp.admin:name=UniversalConnectionPoolManagerMBean") über JMX zu registrieren.

Wenn Sie ihre JMX-Fähigkeiten abschalten, sollte alles reibungslos funktionieren.

1 Stimmen

Leider ist der Link zum Blog defekt :(

2voto

jovanchohan Punkte 127

Ich habe einen Weg gefunden, um dies ohne die dms.jar zu tun

Ich habe diesen Spring Bean hinzugefügt:

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

Die Klasse sieht so aus:

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

In meinen Datenquellen-Beans habe ich depends-on="OracleJMXDisabler" hinzugefügt, damit es zuerst initialisiert wird. Dies funktioniert, weil der UniversalConnectionPoolManager ein Singleton ist und es nur eine Instanz pro Anwendungscontext gibt.

0voto

Oliver Michels Punkte 2709

Sie können versuchen, den JDBC-Treiber (ojdbc6.jar) nicht als Teil Ihrer Web-Apps bereitzustellen. Stellen Sie den JDBC stattdessen nur einmal als Teil des JBoss-JVM-Classpath bereit, indem Sie das Treiber-Jar in /server/default/lib platzieren

1 Stimmen

Ich implementiere den JDBC-Treiber nicht als Teil von Webanwendungen. Ich habe sowohl ojdbc5.jar als auch ucp.jar nach $JBOSS_HOME/server/web/lib verschoben. Aber das hilft nicht.

0voto

sudheer kosuru Punkte 1

Entfernen Sie diese Eigenschaft aus Ihrem Bean. Wenn Sie den Poolnamen festlegen, wird der gleiche Name übernommen und ein Fehler gemeldet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X