通用连接池已存在错误 (Oracle UCP)

问题描述

我正在尝试使用以下代码创建 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

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

解决方法

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

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

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