簡體   English   中英

何時使用XA數據源和非XA數據源

[英]When to Use XA Datasource and Non XA Datasource

我試圖了解Java XA數據源的使用。 但是我仍然無法確定何時使用它,何時不使用它。

我讀到當我們使用兩個數據庫時使用的XA數據源。 但是我不確定兩個數據庫是什么意思。

例如:

我有兩層課程(Service和DAO)

服務層中一個被標記為事務的方法,將調用DAO中的兩個方法。

DAO中的每個方法都會打開與數據庫的新連接,並在方法末尾將其關閉。

如果我使用一個數據庫實例,並且DAO中的每個方法都寫入不同的表,是否必須使用XA數據源? 因為事務發生在服務層,但僅發生在一個實例數據庫中

數據庫之類的系統,以及您通過JMS使用的排隊系統等,都具有事務的概念。 交易被視為工作單元; 在完成工作(例如在數據庫中插入,更新或刪除記錄)之后,您提交事務,然后數據庫確定地完成工作; 或者回滾事務,然后取消事務中完成的所有操作。

在某些情況下,您的軟件必須在多個不同的系統上執行操作。 例如,您可能需要將數據插入多個數據庫,或在數據庫中插入某些內容,然后將消息放入隊列中。

如果要像在一個事務中那樣進行操作組合,則需要一個分布式事務系統-一種可以將不同系統的事務組合為一個系統的系統。 這樣,您可以像在單個事務中運行代碼一樣編寫代碼。 分布式交易系統會自動提交或回滾基礎系統中的交易。

使其更具體:假設您在數據庫中插入一條記錄,然后將一條消息放入隊列中,並且您希望在一個事務中執行此操作。 當將消息放入隊列出了問題時,您還希望回滾數據庫事務,以便您在數據庫中沒有記錄,但隊列中沒有相應的消息。 可以使用分布式事務處理系統來代替手動跟蹤數據庫和隊列系統的事務處理(包括處理所有可能的錯誤組合)。

XA是用於分布式事務的標准。 您可以通過Java事務API(JTA)使用Java處理 XA事務。 Java EE服務器對此內置組件提供支持。 如果您不使用Java EE服務器,則可以使用單獨的實現JTA的庫,例如NarayanaAtomikos

DAO中的每個方法都會打開與數據庫的新連接,並在方法末尾將其關閉。

通常,這不是編寫DAO的方式。 打開數據庫連接是一個相對較慢的操作。 如果為在DAO中調用的每個方法打開一個新的數據庫連接,則程序最像運行緩慢。 您至少應該使用一個連接池,該池管理多個數據庫連接並允許您重用已經打開的連接。

如果我使用一個數據庫實例,並且DAO中的每個方法都寫入不同的表,是否必須使用XA數據源? 因為事務發生在服務層,但僅發生在一個實例數據庫中

如果您的DAO方法各自打開自己的連接,則它們將在單獨的事務中運行。 這是否是一個問題取決於您的應用程序需要做什么。 XA數據源不是使它們在一個事務中運行的解決方案。 相反,您都應該讓他們使用相同的連接和事務。

XA事務實際上僅在使用多個數據庫系統或其他系統並且希望能夠執行跨這些系統的事務時才有用。

暫無
暫無

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

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