2012-08-01 77 views
1

我有以下用例。DB連接關閉監視器

我們的客戶端應用程序將執行一個數據庫調用客戶端應用程序後,返回一個Java結果集的API(這是我)調用。我想知道客戶端何時完成使用結果集,以便我可以關閉結果集與其關聯的連接。所以我認爲的設計是將結果集發送到一個新的對象中,該對象具有關閉結果集的行爲以及與之關聯的連接。這個清理方法必須由客戶端調用。現在,由於某種原因,如果這個清理方法從未被客戶端應用程序調用過,那麼我們將最終打開一個打開的連接和未釋放的數據庫資源。有沒有一種方法可以更好地監控這一點,並確保所有數據庫資源都能及時釋放。此外,如果有任何設計模式可能有助於此用例,請讓我知道。

謝謝。

回答

1

一種方法是使用幻影引用清理對象的結果集/連接(我寧願使用finalize) - 這樣,您應該能夠清理對象並將其簡單地返回給池。根據您的使用情況,您也可以查看超時。

此外,如果可能的話,同意關於未通過結果集的其他建議。
希望它有幫助。

+0

超時是我最初想到的,但我不想冒這個機會,因爲我不知道客戶端應用程序可能需要多少時間來保持結果集。我會試着去探索你所做的幻影參考建議。 – Bharath 2012-08-01 16:44:18

2

不要將昂貴的數據庫資源(如ResultSet)返回到API以外的位置,因爲這會導致您失去所有控件。而應將其映射到List<Map<String, Object>>或其他可重複使用的內容並將其返回。

+0

是的,你是非常正確的,那就是我們的API是如何編寫的。但是我們的客戶端應用程序的性能至關重要,他們希望避免從結果集創建另一個數據結構的成本,而是直接希望它們。 – Bharath 2012-08-01 16:52:36

+2

如果性能如此重要,只需將其設置爲私有API或創建一個新的'ResultSet'或其他昂貴的DB資源不會公開暴露。即使客戶端應用程序更緊密地連接到數據庫,而不需要大量的抽象層。 – BalusC 2012-08-01 16:57:14