[英]How to manage transaction for database and file system in Java EE environment?
我將文件的屬性(大小,更新時間......)存儲在數據庫中。 所以問題是如何管理數據庫和文件的事務。
在Java EE環境中,JTA只能管理數據庫事務。 如果更新數據庫成功但文件操作失敗,我應該為此編寫文件回滾方法嗎? 此外,EJB容器中的文件操作違反了EJB規范。
你怎么看?
理想情況下,訪問外部資源(如文件系統)應通過JCA連接器 。 雖然有幾個帖子圍繞討論這個,我從來沒有找到一個現成的JCA連接器用於事務訪問文件系統,所以我開始寫一個:
關於其他項目:
請注意,只要您有多個交易參與者,該應用即可。 服務器確實需要使用分布式事務,事情變得更復雜。 您不能低估這種復雜性(例如,數據庫具有另一種分布式事務的超時機制)。
另一種需要考慮的輕量級方法是使用在文件系統上寫入的SFSB 。 如果實現SessionSynchronization
接口,則會獲得beforeCompletion
和afterCompletion
回調。 后者指示事務是已提交還是已回滾,並在必要時進行清理。 然后,您可以實現事務性行為。
JTA不僅僅適用於數據庫,如果該資源支持XA事務,它可以與任何其他資源一起使用。 例如, XADisk可以通過XA事務實現文件系統的這種集成。 因此,它還可以解決您一直試圖解決的文件系統和數據庫一致性問題。
希望有所幫助。
尼廷
手動。 您可能需要為此編寫補償交易。
也許看看commons-transaction進行事務性文件訪問。 參考:
在任何情況下,您都必須在EJB容器外部編寫文件,或者與@ewernli指出的JCA連接器進行交互。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.