使用 Oracle UCP 连接池管理器时如何获取连接?

How to get Connection when using Oracle UCP Connection Pool Manager?

寻找有关使用 Oracle UCP 连接池管理器时获取连接的最佳实践的建议。我无法从文档中判断您是否应该保留对 PoolDataSource 对象的引用,并从它们获取连接,或者您是否应该只使用您的管理器通过如下代码获取连接:

(Connection)getConnectionPool(connectionPoolName).borrowConnection(getRetrievalMap().get(connectionPoolName)).getPhysicalConnection();

所有示例似乎都使用 PoolDataSource 对象来获取它们的连接。人们是否保留这些东西,然后只使用 Manager 对 Pools 进行管理?还是他们使用 getPhysicalConnection() 直接从管理器获取 java.sql.Connection 对象?我有点担心使用 getPhysicalConnection(),不确定池是否知道它。例如,关闭使用 getPhysicalConnection() 获得的连接是否会返回到池中?

是否有更好的方法从我没有看到的管理器获取连接?

回答我自己的问题:

经过一些调试,我们似乎不应该在使用池时使用 getPhysicalConnection()。对它执行 close() 不会 return 立即将其放入池中,而来自 PoolDataSource 的连接上的 close() 确实会立即返回到池中。此外,物理连接是 TC4Connection 的一个实例,其中来自 PoolDataSource 的连接是一个具有一些池字段和对 T4CConnection 的引用的代理。

所以我想我们将保存 PoolDataSource 对象并从中获取我们的连接。我希望 Oracle 文档在管理器一章中涵盖这个主题。