繁体   English   中英

jdbc为什么不是从java.sql.Connection继承的javax.sql.PooledConnection

[英]jdbc why isn't javax.sql.PooledConnection inherited from java.sql.Connection

每次我们实现PooledConnection时,我们都会编写

class MyConnection implements PooledConnection, Connection {
  // implement methods of PooledConnection and Connection 
}

我想知道为什么PooledConnection不是设计为extends Connection 因为PooledConnection总是一个Connection

我不确定,但我想PooledConnection不扩展Connection的原因是你可以使用一个非常简单的PooledConnection实现,它使用任何其他现有的Connection实现,允许代码重用并保持功能分离。

...因为PooledConnection总是一个连接。

实际上,这就是重点。 PooledConnection接口设计允许 PooledConnection实例成为Connection实例的不同对象。

为什么要这么做? 在XA实现中,可能存在来自不同数据库供应商的许多不同的Connection实现,而PooledConnection类旨在处理其中的“东西”; 例如跨多个数据库的协调。 保持两个接口不同意味着XA实现不需要将XA级连接实现为包装器对象。

当然,由于PooledConnectionConnection 接口 ,它们可以由相同的连接类实现......如果情况需要它。

(或者至少,这是我的理论。为了得到明确的答案,你需要问那些编写了引起这些接口的规范的人。)

PooledConnection是物理连接的句柄 此物理连接对象可能是JDBC Connection ,但另一方面,它也可能是较低级别的特定于数据库的构造。

句柄是连接池用于创建逻辑Connection -objects以分发给连接池的客户端(使用getConnection()方法。当客户端关闭该连接时,会通知连接池PooledConnection再次可用。

PooledConnection不能直接用作Connection ,因此它不会扩展Connection接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM