java - DataSource 如何成为对 ConnectionPoolDataSource 的引用。

标签 java jdbc

获取连接的首选方式是通过我所读到的数据源。有不同的接口(interface)如DataSourceConnectionPoolDataSource 。假设我们使用 PostgreSQL 驱动程序并希望在 Glassfish 服务器上使用连接池。

在您的应用程序代码中,您调用 getConnection()DataSource 类型的属性上。这怎么可能? Glassfish 还没有创建 ConnectionPoolDataSource 类型的数据源吗? (或者更正确地说是实现类)并将其绑定(bind)到 JNDI 名称,当您使用 JNDI 名称获取数据源时,您将获得 ConnectionPoolDataSource 的对象不是DataSource ?? ConnectionPoolDataSource没有 getConnection()方法。我不明白这个服务器的魔力。

有人可以解释一下这一切是如何结合在一起的吗?

最佳答案

DataSource , DriverConnectionPoolDataSource您可以在 Glassfish 配置中选择的数据不会直接暴露给您的应用程序,而是应用程序服务器有自己的 DataSource 来维护连接池,此数据源使用配置的 DataSourceDriverConnectionPoolDataSource 作为将保留在其池中的连接的工厂。

因此,当您使用 ConnectionPoolDataSource 配置 Glassfish 时,它会使用 ConnectionPoolDataSource 为连接池创建物理连接(PooledConnection 对象)。此连接池由应用程序服务器 DataSource 实现保留。然后,您的应用程序使用此数据源访问该连接池。 DataSource 从连接池中分发逻辑 Connection 对象。

逻辑和物理连接的确切内部工作原理取决于实现,但这些逻辑连接通常是物理连接的某种代理或包装器。当获得逻辑连接时,会从连接池中 check out 物理连接。当关闭逻辑连接时,连接池会收到物理连接再次可用的信号,并将其返回到连接池。

关于java - DataSource 如何成为对 ConnectionPoolDataSource 的引用。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15225209/

相关文章:

java - java中的打卡时钟

java - 使用 UCanAccess 连接到受工作组安全文件 (MDW) 保护的 MS Access 数据库

java - JPA 实体管理器外观

java - 在 Amazon EC2 suse Linux 中导出 JasperReports PDF 时段落高度不够

Java Graphics2D 删除为 alpha 背景

java - SSLHandshakeException unknown_ca apns java

java - Spring 4 @Autowire 未正确绑定(bind)?

java - SELECT FOR UPDATE 在迁移期间锁定数据库

java - 模拟数据库驱动程序

hadoop - 通过Amazon Elastic MapReduce上的MapReduce程序访问时无法加载Hive-JDBC驱动程序