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

时间:2015-04-09 15:39:23

标签: java database oracle database-connection connection-pooling

在使用Oracle UCP连接池管理器时寻找有关获取Connections的最佳实践的建议。我无法从文档中看出你是否应该保留对你的PoolDataSource对象的引用,并从它们获取Connections,或者你应该只使用你的管理器来获取这些代码的连接:

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

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

有没有更好的方法从Manager中获取我没有看到的连接?

1 个答案:

答案 0 :(得分:2)

回答我自己的问题:

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

所以我想我们将保存PoolDataSource对象并从中获取它们的连接。我希望Oracle文档能够在Manager章节中介绍这个主题。