如何使用JTA事务有两个数据库?

问题描述 投票:1回答:2

APP1与应用2(EJB应用程序)使用App2.Uses CMT暴露出一些客户端API进行交互的Jboss.We管理JTA事务使用JNDI查找都可以从应用2(Jboss的)的UserTransaction的。

  1. App1向应用2调用使用UserTransaction's begin() and commit()将数据插入DS2。
  2. APP1使得使用Hibernate JPA插入使用JPATransaction Manager数据到DS1到DS1的呼叫。
  3. 是否有可能换上述两个DB操作在一个事务(分布式事务)

PFB其描述要求图像

java spring jboss5.x jta distributed-transactions
2个回答
2
投票

要做到这一点it's要实现自己的事务资源,能够加入正在进行的JTA事务。看到这个answer以及一些指引,一个办法,看看如何做到这一点是看XA驱动程序代码,数据库或JMS资源,立足自己上。

这是不容易做到并且非常罕见的使用情况,一般在实践中采用的替代设计解决。一种方法是提取从应用2所需的代码放到一个罐子库,并在Tomcat中与像连接到两个XA JTA数据源Atomikos公司一个JTA事务管理器中使用它。

另一种方式是SQL语句到数据库刷新到Tomcat,看看是否能工程,发送同步调用到JBoss,返回的结果,如果在JBoss中的交易经历之前。

根据在tomcat的是提交/回滚。这并不能保证,将工作时间(网络故障等)的100%,但根据系统做什么和失败的交易的商业结果是可以接受的。

还有一种方法是使JBoss的侧操作revertable和暴露的情况下,错误使用Tomcat之类的补偿服务进行检测。对于并使两个服务器JBoss的,你可以利用JBoss的Narayana引擎,也看到这个answer

哪种方式更好它依赖于使用情况,而是实现自己的XA事务服务是一个大的事业,我会更简单更改设计。很少有项目做的原因是这样做是it's复杂,有更简单的方法。


0
投票

Tomcat是一个Web服务器,因此它不支持全局事务。

JBoss是一个应用服务器,所以它支持全局事务。

如果你有这两个结合起来,你必须使用JOTM或Atomikos公司充当Trasaction经理和提交或回滚。

© www.soinside.com 2019 - 2024. All rights reserved.