2

获得连接的首选方法是通过我读过的数据源。有不同的接口,例如DataSourceConnectionPoolDataSource。假设我们使用 PostgreSQL 驱动程序并希望在 Glassfish 服务器上使用连接池。

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

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

4

1 回答 1

4

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

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

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

于 2013-03-05T13:51:07.810 回答