簡體   English   中英

如何在Java EE環境中管理數據庫和文件系統的事務?

[英]How to manage transaction for database and file system in Java EE environment?

我將文件的屬性(大小,更新時間......)存儲在數據庫中。 所以問題是如何管理數據庫和文件的事務。

在Java EE環境中,JTA只能管理數據庫事務。 如果更新數據庫成功但文件操作失敗,我應該為此編寫文件回滾方法嗎? 此外,EJB容器中的文件操作違反了EJB規范。

你怎么看?

理想情況下,訪問外部資源(如文件系統)應通過JCA連接器 雖然有幾個帖子圍繞討論這個,我從來沒有找到一個現成的JCA連接器用於事務訪問文件系統,所以我開始寫一個:

關於其他項目:

請注意,只要您有多個交易參與者,該應用即可。 服務器確實需要使用分布式事務,事情變得更復雜。 您不能低估這種復雜性(例如,數據庫具有另一種分布式事務的超時機制)。

另一種需要考慮的輕量級方法是使用在文件系統上寫入的SFSB 如果實現SessionSynchronization接口,則會獲得beforeCompletionafterCompletion回調。 后者指示事務是已提交還是已回滾,並在必要時進行清理。 然后,您可以實現事務性行為。

JTA不僅僅適用於數據庫,如果該資源支持XA事務,它可以與任何其他資源一起使用。 例如, XADisk可以通過XA事務實現文件系統的這種集成。 因此,它還可以解決您一直試圖解決的文件系統和數據庫一致性問題。

希望有所幫助。

尼廷

手動。 您可能需要為此編寫補償交易。

也許看看commons-transaction進行事務性文件訪問。 參考:

在任何情況下,您都必須在EJB容器外部編寫文件,或者與@ewernli指出的JCA連接器進行交互。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM