2012-03-30 18 views
1

我知道Java EE的session對象可以存儲複雜對象,例如連接到數據庫。在Java EE的Session .vs中保存conexion。一個連接池

我在思考如何使用Java EE製作的編程實踐中的某個應用程序。我的第一個選擇是使用連接池,這對於Java EE來說非常簡單。

我想知道,出於好奇,也爲了正確地證明這個決定,當客戶端開始會話並將其存儲在那裏時,創建與數據庫的連接有什麼優點和缺點,一個連接池。

非常感謝。

回答

2

資源池將以您的系統可以應對的方式優化對資源(您的數據庫連接)的處理。儘管如果你有很多打開的連接,你可能會失去資源。

如果將數據庫連接存儲在會話上下文中,則更有可能發生這種情況。 Web應用程序不需要一直連接到數據庫,該連接可以在新操作開始時建立並在結束時關閉。使用資源池可以在不再需要連接時將連接返回到池中,因此新用戶(Web範例中的會話)可以使用您已經發布的資源,而不是創建新資源。

該池還將處理某些資源長時間處於空閒狀態(沒有人在特定時間段內使用過它們)的情況,然後它將釋放這些資源。

在會話中存儲數據庫連接時,您永遠不會釋放資源,但會永久引用該資源,只要用戶會話持續時間就會持續。您可能不會在短時間內遇到任何問題,特別是如果同時連接的用戶非常少。但在現實世界的應用程序中,您將明確地找到它們。

因此,在會話上下文中存儲數據庫連接被認爲是壞習慣

編輯:我忘了提,只存儲在會話,這樣,如果應用程序服務器決定鈍化會話,它可以持續並在應用服務器決定將其重新激活恢復Serializable對象。數據庫連接不是Serializable資源。

1

使用連接池可以最大限度地提高連接的可用性。這意味着更少的連接=更少的內存=更少的套接字等。池會比保存在會話中更好的原因是,如果有人意外退出會發生什麼?如果您的會話中有連接,則可能會無限期地讓該連接長時間處於活動狀態。