Java UniversalConnectionPoolManagerBean在应用程序后已存在;关于;开始

Java UniversalConnectionPoolManagerBean在应用程序后已存在;关于;开始,java,webserver,weblogic,connection-pooling,Java,Webserver,Weblogic,Connection Pooling,当我将包含servlet的应用程序.war部署到我的weblogic服务器时,它运行良好。servlet使用了UniversalConnectionPoolManagerBean的一个实例,并在启动时没有任何问题 在管理控制台中,我使用“工作完成时停止”命令和它调用的destroy()方法: UniversalConnectionPoolManagerImpl.getUniversalConnectionPoolManager() .startConnection

当我将包含servlet的
应用程序.war
部署到我的weblogic服务器时,它运行良好。servlet使用了
UniversalConnectionPoolManagerBean
的一个实例,并在启动时没有任何问题

在管理控制台中,我使用“工作完成时停止”命令和它调用的
destroy()
方法:

UniversalConnectionPoolManagerImpl.getUniversalConnectionPoolManager()
                .startConnectionPool(mConnectionPoolName);
然后单击管理控制台中的“启动服务请求”命令时,出现以下异常:

 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 com.exzac.dal.jdbc.Database.getConnection(Database.java:134)
at com.exzac.dal.jdbc.Database.executeQuery(Database.java:161)
at com.exzac.profilesystem.ProfileSystemConfiguration.retrieveConfigurationTable(ProfileSystemConfiguration.java:214)
... 49 more
Caused by: 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:587)
at oracle.ucp.jdbc.PoolDataSourceImpl.startPool(PoolDataSourceImpl.java:276)
at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:646)
at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:613)
at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:607)
at com.exzac.dal.jdbc.Database.getConnection(Database.java:132)
... 51 more
 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:587)
at oracle.ucp.jdbc.PoolDataSourceImpl.startPool(PoolDataSourceImpl.java:247)
... 55 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:149)
at oracle.ucp.jdbc.PoolDataSourceImpl.startPool(PoolDataSourceImpl.java:242)
... 55 more
 Caused by: java.security.PrivilegedActionException: javax.management.InstanceAlreadyExistsException: oracle.ucp.admin:name=UniversalConnectionPoolManagerMBean
at java.security.AccessController.doPrivileged(Native Method)
at oracle.ucp.admin.UniversalConnectionPoolManagerMBeanImpl.getUniversalConnectionPoolManagerMBean(UniversalConnectionPoolManagerMBeanImpl.java:136)
... 56 more
 Caused by: javax.management.InstanceAlreadyExistsException: oracle.ucp.admin:name=UniversalConnectionPoolManagerMBean
at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:453)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.internal_addObject(DefaultMBeanServerInterceptor.java:1484)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:963)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:917)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:312)
at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:482)
at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$27.run(WLSMBeanServerInterceptorBase.java:714)
at java.security.AccessController.doPrivileged(Native Method)
at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.registerMBean(WLSMBeanServerInterceptorBase.java:709)
at weblogic.management.mbeanservers.internal.JMXContextInterceptor.registerMBean(JMXContextInterceptor.java:448)
at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$27.run(WLSMBeanServerInterceptorBase.java:712)
at java.security.AccessController.doPrivileged(Native Method)
at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.registerMBean(WLSMBeanServerInterceptorBase.java:709)
at weblogic.management.jmx.mbeanserver.WLSMBeanServer.registerMBean(WLSMBeanServer.java:462)
at oracle.ucp.admin.UniversalConnectionPoolManagerMBeanImpl$2.run(UniversalConnectionPoolManagerMBeanImpl.java:142)
... 58 more
从那时起,我遇到了这个异常,即使我停止服务器,重新启动并尝试部署。似乎只有清除所有已发布的资源才能清除异常。我知道在销毁方法中未正确清理已发布的资源,我认为该资源是
UniversalConnectionPoolManagerBean
实例,但我认为可以通过
destroyConnectionPool
方法进行清理:

如何避免遇到此异常

正如一个有趣(但不安全)的解决方法:出于某种原因,当我将此插入初始化时:

 try {
     UniversalConnectionPoolManagerImpl.getUniversalConnectionPoolManager().destroyConnectionPool(mConnectionPoolName);
     } catch (final Exception e1) {
     LOGGER.error(e1);

     } 

异常被抛出并捕获,表示它找不到具有此名称的
connectionPool
要销毁,但原始问题消失了
javax.management.instancealreadyexistException:oracle.ucp.admin:name=universalConnectionPoolManagerBean未抛出

此错误似乎已在11.2.0.4和12.1.0.2版本中修复。我找不到任何关于它的文档,但对我来说,上述版本的错误消失了

JDBC/UCP下载页面:

这是来自Oracle的11.2.0.4 UCP.jar README.txt

11.2.0.4中的修复 16805157创建UniversalConnectionPoolManagerBean的名称 每个类加载器都是唯一的,因此每个UCP实例都是唯一的 即使在同一个JVM中


这修复了原始问题中描述的javax.management.InstanceAlreadyExistsException。使用创建的每个连接池都有一个唯一的名称,不会导致InstanceAlreadyExistsException。但是,由于您正在重新启动,您应该研究如何干净地关闭连接池MBean,以免遇到此问题。

您好,欢迎使用堆栈溢出!看起来你在做一个引证。请考虑扩大你的答案,以便包括原始报价的来源和作者。另外,考虑清楚它是如何解决OP问题的。非常感谢。嘿,你是想用一个注册帐户给你自己的问题加上引证吗?它显示在建议的编辑队列中。如果两个帐户都属于您,则您可能希望在获得5个代表后请求将它们合并。