【问题标题】:JDBC Datasources implemented by app servers应用服务器实现的 JDBC 数据源
【发布时间】:2013-03-04 19:14:31
【问题描述】:

我正在学习数据源,我想我已经开始理解它了,但是这一段我不明白。

据我所知,MySQL 和 PostgreSQL 等数据库供应商编写了他们自己的不同 DataSource 接口的实现。现在,这还不够吗?应用服务器应该提供 DataSource 实现是什么意思?这样做的原因是什么?

ConnectionPoolDataSource 的 PostgreSQL 实现。应用服务器 或中间件供应商应提供一个 DataSource 实现,该实现 利用此 ConnectionPoolDataSource。如果没有,您可以使用 PostgreSQL 实现称为 PoolingDataSource,但是 仅应在您的服务器或中间件供应商不提供的情况下使用 提供自己的。为什么?服务器可能希望重用相同的 跨所有请求连接的 EJB 的连接 交易,或提供其他类似的高级功能。

http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/ds/PGConnectionPoolDataSource.html

【问题讨论】:

    标签: java postgresql jdbc


    【解决方案1】:

    通常,webapp 数据源将委托给 PostgreSQL 实现。这允许 web 应用程序中的监控和其他功能,如果您管理自己的数据源,这些功能将不可用。

    【讨论】:

    • 我认为最突出的此类功能是池化。当您向“真实的”DataSource 询问Connection 时,它会让您成为新的。当您向应用服务器的 DataSource 请求连接时,它会从现成的连接池中获取连接。同样,当您关闭Connection 时,它并没有真正关闭它,它只是将它放回池中。这降低了创建新连接的成本,并提高了性能。
    • @TomAnderson 但是 PostgreSQL 已经实现了连接池?
    • 这是功能之一。您可以通过管理自己的池(使用 PoolingDataSource 或像 Apache 的第三方池)来获得池的好处。但是,如果您使用应用服务器的池,例如,可以在单个应用服务器中的不同 Web 应用程序之间共享单个配置。此外,您的应用不需要访问连接信息或凭据,这在安全方面非常明智。
    • @AndresOlarte 好的。所以应用服务器实际上没有池/分布式事务支持的逻辑,但它管理它并委托给由 DBMS 供应商实现的数据源,但还有让应用服务器管理它的额外好处?
    • @Andy:PostgreSQL 的PGConnectionPoolDataSource提供池化。它提供的是一些钩子(在ConnectionPoolDataSource 中定义),应用服务器可以使用这些钩子来实现来自该源的连接池。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2014-07-22
    相关资源
    最近更新 更多