2012-10-18 109 views
0

我們可以像課堂上要收集垃圾一樣在班級中獲得活動嗎?垃圾收集事件

讓我解釋一點:

我使用JPA API得到數據庫對象。 所以現場是我們必須打開EntityManager,撥 各自的東西離開前關閉它。

但是,如果有人忘了關閉entitymanager接下來所有查詢到相同的數據庫給出以前未更新的結果。 :(

我的觀點是通過任何方式我得到的東西像你這樣的事情將被破壞,在那種情況下,我會寫代碼this.entitymanager.close(),那樣每次在的EntityManager對象自行關閉,如果用戶忘記關閉,下一次垃圾收集器來收集它

我知道析構函數的事情是不可能的,但什麼處理這一目標的最佳方式是什麼?

+0

如果你不注入持久化上下文,試試 - 最後是你的朋友... –

回答

3

也許這會幫助你;

@Override 
protected void finalize() { 
    try { 
     close();  // close EntityManager connection 
    } finally { 
     super.finalize(); 
    } 
} 

當對象計劃爲垃圾收集時調用Finalize。

+2

沒有保證最終確定被調用,所以我想這不是一個選項 –

+0

@PetrMensik就是如果應用程序突然終止?如通過'System.exit()' – Jivings

+0

+1這是除了修復代碼之外可用的最佳選項,因此資源總是可以正確清理。如果資源未被關閉,您可以將堆棧跟蹤記錄到其中,因此您可以追蹤該錯誤的來源。 –