2014-02-13 32 views
1

Pictorial representation of the issue如何在兩個數據庫中使用JTA事務?

使用App2.Uses CMT暴露出一些客戶端API

應用1與應用2(EJB應用)交互管理的Jboss.We JTA事務使用JNDI查找正從應用2(Jboss的)的UserTransaction的。

  1. App1打電話給App2,使用UserTransaction's begin() and commit()將數據插入到DS2中。
  2. App1使用Hibernate JPA調用DS1,使用JPATransaction Manager將數據插入DS1。
  3. 是否有可能換上述兩個DB操作在一個事務(分佈式事務)

PFB描述要求

回答

2

爲此it's要實現自己的事務資源的圖像,能夠加入正在進行的JTA交易。看到這個answer以及一些指導方針,看看如何完成的一種方法是查看數據庫或JMS資源的XA驅動程序代碼,並以此爲基礎。

這不是微不足道的事情,也是非常罕見的用例,通常在實踐中通過採用替代設計來解決。一種方法是將必要的代碼從App2提取到jar庫中,然後在Tomcat中使用JTA事務管理器,如Atomikos連接到兩個XA JTA數據源。

另一種方法是將SQL語句清理成數據庫到tomcat中,然後在向JBoss發送同步調用之前查看它是否有效,如果JBoss事務處理完畢則返回結果。

取決於在tomcat中的提交/回滾。這並不能保證100%的時間都可以工作(網絡故障等),但可能可以接受,具體取決於系統的作用和失敗事務的業務後果。

還有一種方法是在JBoss端使操作可恢復,並在檢測到錯誤時公開tomcat使用的補償服務。爲了做到這一點,製作兩個服務器JBoss,你可以利用JBoss Narayana引擎,也可以參考這個answer

哪種方式更好取決於用例,但實現自己的XA事務服務是一項重大任務,我會更簡單地更改設計。很少有項目正在這樣做的原因是因爲它很複雜,而且有更簡單的選擇。

相關問題