簡體   English   中英

在兩階段提交事務中使用非XA數據源時引發異常

[英]Exception thrown when using non-XA datasource in two-phase commit transaction

我的Websphere應用程序有3個數據源。 其中兩個是XA,另一個是非XA。

我通過使用@transactional注釋對方法進行注釋來使Java方法具有事務性。

在該方法中,執行了3個任務。 第一個使用一個XA數據源進行一些更新,然后第二個使用非XA數據源選擇一些記錄,最后一個任務使用另一個XA數據源再次進行一些更新。

但是,會引發異常,並出現以下錯誤: An illegal attempt to commit a one phase capable resource with existing two phase capable resources

我想知道為什么即使我的應用程序僅使用非XA來選擇一些數據並且不需要提交,還是會發生上述錯誤,如果不允許我將非XA數據源更改為XA,如何解決該問題? 。

默認情況下,非XA資源無法參與分布式事務。 因此,您有以下選擇:

  • 將數據源更改為XA-您寫道無法執行此操作
  • 嘗試啟用最后一個參與者支持 -最后一個參與者支持是事務服務的擴展,它使單個一階段資源可以使用一個或多個兩階段資源參與兩階段事務。
  • 如果您不需要事務,則將此(nonXA)數據源設置為非事務性的。 它將不會參與交易:
 Select Resources > JDBC > Data sources Select the name of the data source that you want to configure. Select WebSphere Application Server data source properties from the Additional Properties heading. Select Non-transactional data source. Click OK. 
  • 將那個nonXA調用包裝在EJB中,並將其標記為不支持事務。
  • 手動管理交易-不使用容器管理的交易,而是使用Transaction API在您的方法內部手動處理交易。

當開始第二個任務時,在使用@Transaction注釋時, need to be commit or rolled back在XA數據源上更新的前一個任務,整個任務會自動執行一次事務,因此請不要使用@Transaction注釋,而應使用@Transaction注釋將每個任務放在單獨的事務中

暫無
暫無

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

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