不同的系统之间,相互调用,如何保证数据的一致性?

问题描述

有两个不同Javaweb(strut2+ibatis+spring)项目,相互之间调用,如何保证他们数据(事务)的一致行?如Project1(P1)中有method1(m1)方法,Project2(P2)中有method2(m2)方法,如果m1中调用m2,如果m2出现异常,m2回滚,同时m1也回滚;如果调用m2后,m1出现异常,m1回滚,同时m2也回滚到调用前的状态,请问这个改如何实现?

解决方案

解决方案二:
JTA。spring里可以用。网上搜吧。
解决方案三:
看错了。不好意思
解决方案四:
两个系统相互调用,要用到webservice,在被调用系统异常的时候,给个返回值,在调用系统里判断这个值,如果这个值正常就提交,如果异常则回滚。
解决方案五:
引用3楼FAT0708的回复:

两个系统相互调用,要用到webservice,在被调用系统异常的时候,给个返回值,在调用系统里判断这个值,如果这个值正常就提交,如果异常则回滚。

这样是不行的,比如系统A,系统B,调用A,等B的返回值,B返回1(正常),这个时候B已经提交,A得到B的返回值,进行提交,出错了,A回滚,B已经提交了,无法回滚了。具体怎么能实现,要好好想想。
解决方案六:
还是JTA吧。
解决方案七:
最近泡妞泡的头晕了都
解决方案八:
引用4楼yangxiao_jiang的回复:

引用3楼FAT0708的回复:两个系统相互调用,要用到webservice,在被调用系统异常的时候,给个返回值,在调用系统里判断这个值,如果这个值正常就提交,如果异常则回滚。这样是不行的,比如系统A,系统B,调用A,等B的返回值,B返回1(正常),这个时候B已经提交,A得到B的返回值,进行提交,出错了,A回滚,B已经提交了,无法回滚了。

说的很对,无论是用webservice调用,还是RMI调用,都可能出现一个已经提交,而另一个异常,无法回滚。3楼说用JTA,我也看了看,但网上看到的都是同一个web应用里,多个数据源,用JTA可以保证,但并没有看到不同web应用之间相互调用,用JTA可以保证的例子啊,所以不是很清楚,想请高手指点一二啊
解决方案九:
不同web应用之间相互调用,用JTA可以保证的例子---------------------你在2个项目里面都用JTA不就行了。
解决方案十:
JTA是实现不了这种的,理论上来说,应该有一个主,一个次,主的成功,在提交次的,因为是次的,所以提交成功不是十分重要。就是说你的这种要求,应该是无法达到的。
解决方案十一:
引用9楼yangxiao_jiang的回复:

JTA是实现不了这种的,理论上来说,应该有一个主,一个次,主的成功,在提交次的,因为是次的,所以提交成功不是十分重要。就是说你的这种要求,应该是无法达到的。

无法达到?用EJB也不行吗?
解决方案十二:
JPA全局事务吧?

时间: 2024-10-25 11:14:59

不同的系统之间,相互调用,如何保证数据的一致性?的相关文章

分布式系统的那些事儿(三) - 系统与系统之间的调用

系统与系统之间的调用通俗来讲,分为本地同一台服务器上的服务相互调用与远程服务调用,这个都可以称之为RPC通信.浅白点讲,客户访问服务器A,此时服务器要完成某个动作必须访问服务器B,服务器A与B互相通信,相互调用,A访问B的时候,A挂起,等待B的响应,B响应返回相应的数据个A,A再返回给用户,这就是一个很简单的栗子. 举个常见栗子,用户上传图片,用户上传图片首先会经过自身的服务器,然后再对图片进行处理,此时图片处理放在图片服务器中进行,那么我们只需要调用图片服务器提供的接口即可,然后等待响应返回的

C与C++之间相互调用的实例方法

 这篇文章主要介绍了C与C++之间相互调用的实例方法,大家参考使用吧 1.导出C函数以用于C或C++的项目   如果使用C语言编写的DLL,希望从中导出函数给C或C++的模块访问,则应使用 __cplusplus 预处理器宏确定正在编译的语言.如果是从C++语言模块使用,则用C链接声明这些函数.如果使用此技术并为DLL提供头文件,则这些函数可以原封不动地由C和C++模块使用.   以下代码演示可由 C 和 C++ 客户端应用程序使用的头文件:     代码如下: // MyCFuncs.h #i

Android Activity之间相互调用与传递参数的原理与用法分析_Android

本文实例讲述了Android Activity之间的相互调用与传递参数.分享给大家供大家参考,具体如下: Activity之间是如何调用的 在javaWeb程序中,jsp与jsp之间的调用是通过重定向完成的,而在Android中,Activity与Activity之间的切换是通过Intent来完成的. 所谓Intent,它是Android中非常重要的内置组件,他可以理解为"我要干一件什么事情".在Android中有3大组件:Activity,Service.Broadcast,他们之间

Android Activity之间相互调用与传递参数的原理与用法分析

本文实例讲述了Android Activity之间的相互调用与传递参数.分享给大家供大家参考,具体如下: Activity之间是如何调用的 在javaWeb程序中,jsp与jsp之间的调用是通过重定向完成的,而在Android中,Activity与Activity之间的切换是通过Intent来完成的. 所谓Intent,它是Android中非常重要的内置组件,他可以理解为"我要干一件什么事情".在Android中有3大组件:Activity,Service.Broadcast,他们之间

C与C++之间相互调用

1.导出C函数以用于C或C++的项目 如果使用C语言编写的DLL,希望从中导出函数给C或C++的模块访问,则应使用 __cplusplus 预处理器宏确定正在编译的语言.如果是从C++语言模块使用,则用C链接声明这些函数.如果使用此技术并为DLL提供头文件,则这些函数可以原封不动地由C和C++模块使用. 以下代码演示可由 C 和 C++ 客户端应用程序使用的头文件: // MyCFuncs.h #ifdef __cplusplus extern "C" { // only need t

C与C++之间相互调用实例方法讲解_C 语言

1.导出C函数以用于C或C++的项目 如果使用C语言编写的DLL,希望从中导出函数给C或C++的模块访问,则应使用 __cplusplus 预处理器宏确定正在编译的语言.如果是从C++语言模块使用,则用C链接声明这些函数.如果使用此技术并为DLL提供头文件,则这些函数可以原封不动地由C和C++模块使用. 以下代码演示可由 C 和 C++ 客户端应用程序使用的头文件: 复制代码 代码如下: // MyCFuncs.h#ifdef __cplusplusextern "C" {  // o

Javascript框架(iframe)之间相互传值程序代码

很多框架存在父子关系,操作起来十分麻烦,很多同学经常出现这样悲催的代码:  代码如下 复制代码 window.parent.document.getElementById("main") .contentWindow.document.getElementById('input').value = document.getElementById('myIframe') .contentWindow.document.getElementById('s0').value; 看一个我自己做

Android编程使用WebView实现与Javascript交互的方法【相互调用参数、传值】

本文实例讲述了Android编程使用WebView实现与Javascript交互的方法.分享给大家供大家参考,具体如下: Android中可以使用WebView加载网页,同时Android端的Java代码可以与网页上的JavaScript代码之间相互调用. 效果图: (一)Android部分: 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&qu

服务系统数据的一致性:可靠事件

微服务架构解决了很多问题,但是同时引入了很多问题.设计到系统,其中绕不开的就是数据一致性,从本地事务,到后来的分布式事务,都能够有效的保证数据一致性.但是在微服务架构中,这两种方式都不是最好的选择. 场景:话费充值业务 1.用户进入便民中心进入话费充值 页面,输入电话号码.选择面值: 2.购买话费充值商品,有库存限制则判断库存,生成充值购买订单: 3.选择对应的支付方式(银联.支付宝.微信)进行支付操作: 4.支付成功后,近实时话费到账即可显示账户可用余额: 此业务流程看似不是很复杂对吧,是虚拟