2017-08-24 102 views

回答

1

您不能在單個事務中使用多個本地(=非XA)數據源,但可以在全局事務中合併多個XA資源,或讓非XA資源參與全局事務(使用1個XA數據源) (參見LLR 1/2)。

可以考慮的事情: 禁用對一個非XA數據源的事務支持或將它們封裝在具有@TransactionAttribute(NOT_SUPPORTED)的EJB中以禁用事務。您也可以手動編排交易,但這可能會變得相當麻煩。

GlassFish 3 documentation:(舊版本,但同樣適用於新版本)

事務範圍本地事務只涉及一個非XA 資源,並要求所有參與的應用程序組件 一個過程中執行。本地事務優化針對資源管理器是特定的 ,對Java EE應用程序透明。

在GlassFish應用服務器,JDBC資源是不可XA如果符合下列條件要麼 :

  • 在JDBC連接池的配置,數據源類不 無法實現的javax。 sql.XADataSource接口。

  • 資源類型設置未設置爲javax.sql.XADataSource。

    • 一個且唯一一個非XA資源用於:如果滿足下列條件保持爲真

    事務依舊是局部的。如果使用任何其他非XA 資源,則事務將中止。

  • 沒有事務導入或導出。

交易涉及多個資源或多個參與者 過程分佈式或全局事務。如果啓用了最後一次代理優化,則全局事務 可能涉及一個非XA資源。否則,所有資源必須是XA。默認情況下,use-last-agent-optimization 屬性設置爲true。有關如何設置此 屬性的詳細信息,請參閱配置事務服務。

如果在事務中僅使用一個XA資源,則會發生一階段提交 ,否則該事務將與兩階段提交協議協調。

相關問題