双操作

A系统是演唱会订票系统,B系统是付款系统,负责处理A系统和银行之间的,收钱。退钱的操作。

B系统式多线程的。也就是A系统请求付钱。B系统在验证合法性后,一方面起线程调用银行的API,等返回结果后又起一线程来发通知给A系统(A系统的servlet)做一些更新数据库的操作。
A系统有自己的业务tranxAppID,B系统有tranxID与tranxAppID。

在退票页面。有个确认页面。当你同时打开两个窗体同时点到确认页面后,断点设在B系统调API之前,uA先点,后uB再点,uB会报错,因为uA已经把A和B系统的那个tranx标志为退款的了,那么uB的那个操作就会退回到A中,并且把A数据库中的tranx标志设为null,后来你再让uA执行,那么银行扣钱是成功了。当发通知给A系统时,银行A系统的按个tranx被设为null了。。所以A系统就返回错误给B,那么B认为A没操作成功,就不停的发通知(达到一定数停止),
还有就是以个tranx定2个演唱会的票,那么在退某个票的时候,执行上面的操作就会一张票扣两次钱,下次你再扣另外一张就没钱扣了。。这是很严重的问题,

关键就是在如何避免uA uB两个页面同时操作的问题, 问题的解决方案就是versuonNum的简单解决方案,在页面隐藏version值,在点YES按钮 按照version更新表中的值,如果成功证明没人动过这个记录。否则有人已经先动了。就不会调B系统。这样问题就解决了。

饶了一大圈。。还是回归到了最简单的解决方案。。。哎。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值