2013-03-04 65 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