【问题标题】:Universal Connection Pool already exists error (Oracle UCP)通用连接池已存在错误 (Oracle UCP)
【发布时间】:2021-09-01 16:15:50
【问题描述】:

我正在尝试使用以下代码创建 UniversalConnectonPool:

// Read and process properties
PoolDataSource poolDataSource = createUniversalConnectionPool();
    
universalConnectionPoolManager = UniversalConnectionPoolManagerImpl.getUniversalConnectionPoolManager();
    
universalConnectionPoolManager.createConnectionPool((UniversalConnectionPoolAdapter) poolDataSource);
    
universalConnectionPoolManager.startConnectionPool(getSchema());

.
.
.
.

UniversalConnectionPool universalConnectionPool = universalConnectionPoolManager.getConnectionPool(getSchema());
UniversalPooledConnection universalPooledConnection = universalConnectionPool.borrowConnection(universalConnectionPool.getConnectionRetrievalInfo());

connection = (Connection) universalPooledConnection.getPhysicalConnection();

但是第三行universalConnectionPoolManager.createConnectionPool((UniversalConnectionPoolAdapter) poolDataSource);抛出异常:

Caused by: oracle.ucp.UniversalConnectionPoolException: Universal Connection Pool already exists in the Universal Connection Pool Manager. Universal Connection Pool cannot be added to the Universal Connection Pool Manager
        at oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException(UCPErrorHandler.java:421)
        at oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException(UCPErrorHandler.java:389)
        at oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException(UCPErrorHandler.java:403)
        at oracle.ucp.admin.UniversalConnectionPoolManagerBase.setConnectionPool(UniversalConnectionPoolManagerBase.java:599)
        at oracle.ucp.admin.UniversalConnectionPoolManagerBase.createConnectionPool(UniversalConnectionPoolManagerBase.java:559)
        ... 30 more

你能告诉我我在这里做错了什么吗?我是使用连接池的新手,所以还在学习它的来龙去脉。

【问题讨论】:

    标签: java oracle jdbc oracle11g ucp


    【解决方案1】:

    您不能拥有多个同名池。 在您的情况下,您似乎已经有一个同名的现有池。 您可以参考 UCP 代码示例here

    此外,要借用和返回池连接,您可以使用以下标准 API。 请注意,如果池尚未启动,调用 poolDataSource.getConnection() 会在内部创建并启动池。

    // borrows a connection
    Connection conn = poolDataSource.getConnection();
    // return connection to pool
    conn.close();
    

    【讨论】:

    • 链接中的示例代码已经写在createUniversalConnectionPool()中。而且由于这是在服务器启动时,我怀疑是否创建了任何其他数据源。
    • // 读取和处理属性 PoolDataSource poolDataSource = createUniversalConnectionPool();这一行足以配置池。在此之后,您可以简单地调用 poolDataSource.getConnection() 从池中借用连接。调用 getConnection() 将在内部创建并启动池,无需显式执行。
    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 2019-03-06
    • 2017-06-04
    • 1970-01-01
    • 2015-06-15
    • 2017-02-04
    相关资源
    最近更新 更多