J2ee web程式的service層中的事務怎樣處理才比較合理?

wilson751發表於2007-12-21
目前在一個遺留系統上增加新功能,該系統採用的struts和hibernate,沒有使用spring來對service層進行管理。我在增加新功能的時候,業務邏輯放在service層來實現,遇到一個問題:怎樣在service層對事務進行合理的控制?
一個service方法中,通常要呼叫多個dao方法,這時,service的方法才是一個事務單元。
第一個問題:service方法中的每個dao方法共用一個session,還是各用各的?
如果共用一個session,service方法中只要呼叫HibernateUtils來得到一個session,接著開始事務,然後執行多個dao方法,然後提交事務,關閉session就可以了。

如果各用各的,在service方法中獲得事務,然後將session管理放到每個dao方法中,這時,service方法中的事務要跨越多個session,這時必須用JTA實現(查資料所得).
第二個問題:有些情況下,需要把service方法中呼叫的多個dao方法中的每一個設定成事務單元,這時怎樣處理service方法的事務和dao方法的事務?肯定不能是service方法作為一個事務單元,而它呼叫的每個的每個dao方法也各自處理成一個事務單元吧?

相關文章