2013-03-04 55 views
0

我正在学习数据源,我想我已经开始理解它,但这一段我没有得到。由应用服务器实现的JDBC数据源

从我现在知道的数据库供应商如MySQL和PostgreSQL编写他们自己的不同的DataSource接口的实现。现在,这难道不够吗?应用服务器意味着什么应该提供一个DataSource实现?这样做的理由是什么?

PostgreSQL实现的ConnectionPoolDataSource。应用程序服务器 或中间件供应商应提供一个DataSource实现,该实现可利用此ConnectionPoolDataSource。如果不是,您可以使用PostgreSQL实现称为PoolingDataSource的 ,但只有在您的服务器或中间件供应商不提供其自身的 时才应使用 。为什么?服务器可能希望重复使用同一个 事务内的所有EJB之间的连接请求,或提供其他类似的高级功能。

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

回答

2

通常webapp的数据源将委托到PostgreSQL执行。这允许webapp中的监视和其他功能,如果您管理自己的数据源,这将不可用。

+1

我认为,最突出的这种特征是集合。当你问一个“真正的”DataSource作为“连接”时,它会让你变成一个新的。当你向一个应用服务器的'DataSource'请求连接时,它从一个现成的连接池中获取它。同样,当你关闭Connection时,它并没有真正关闭它,它只是把它放回池中。这减少了创建新连接的成本,并提高了性能。 – 2013-03-04 20:09:46

+0

@TomAnderson但PostgreSQL已经有连接池的实现? – LuckyLuke 2013-03-04 20:27:32

+0

这是其中一项功能。您可以通过管理自己的池(使用PoolingDataSource或像Apache这样的第三方池)来获得池化优势。但是,如果您使用应用程序服务器的池,则可以在单个应用程序服务器中的不同Web应用程序之间共享单个配置。此外,您的应用程序不需要访问连接信息或凭证,这非常安全。 – 2013-03-04 20:31:02