我们正在开发一个Java程序,它有很多独立的组件(比如A,B,C,D(。我们使用Hibernate框架进行数据库映射。他们中的一些人在同一个JVM进程上工作,其中一些人在不同的JVM进程上工作。所有这些组件都具有 REST 终结点,并具有自己的实体映射文件。这些组件中的每一个都通过 TCP 相互通信。有一些业务逻辑需要其中一些组件协同工作。问题从这里开始。假设组件 A 被调用。A 启动一个新事务并更改数据库上的一些数据,然后调用组件 B。当组件 B 接受请求时,它会打开一个新事务并更改数据库上的一些信息并提交。完成工作后,将结果返回给组件 A.组件 A 再次开始执行一些操作,但失败并回滚所有更改其已完成的操作并将响应返回到后面。但是组件B所做的更改仍然存在。这是我们程序的一个小例证。我们需要什么 处理这个问题的最佳方法是什么?
-
不知何故,我们在所有组件之间共享事务。因此,当组件首先收到请求时,请检查此请求是否有任何活动事务。
-
第二个选项是对所有实体使用一个组件,所有其他组件都使用它。当请求出现时,我们打开一个事务,所有组件都完成它们的工作,当我们返回响应时,我们会检查是否没有任何异常,否则我们会提交回滚。
还有其他办法吗?或者在多个组件体系结构系统之间使用事务的最佳实践是什么?使用单个组件将所有实体信息保存在一个点上有什么优缺点?任何帖子、博客、文档、教程或书籍都是可以接受的。或者,如果可以,您可以分享您的实验。
您希望实现"分布式事务"。
如果你有一个Java应用程序,我推荐Spring,因为它支持分布式事务: https://www.javaworld.com/article/2077963/open-source-tools/distributed-transactions-in-spring--with-and-without-xa.html