有谁知道银行的跨行转帐是怎么保证交易的原子性和一致性?

最近在看《JavaTransactionDesignStrategies》,想到了对事务要求比较严格的银行间转帐这种事务,夸行转帐是怎么保证事务的原子性和一致性呢?首先我能想到的就是使用JTA,用两阶段提交,可是仔细一想,发现还是不能完整保证:

假设转帐步骤如下:

beginjtatransaction

从A行A用户扣款-->命名为A操作

往B行B用户存款-->命名为B操作

commitorrollback

由于使用了两阶段提交,所以提交事务时,将发生

preparedcommitA

preparedcommitB

commitA

commitB

假如在prepared都没有任何问题,然后commitA成功,commitB时发生网络故障,失败,然后试图rollbackA,发现与A数据库服务器网络也在这一瞬间发生故障,那就造成了从A扣款成功,但没能往B帐号存款。

我没有任何银行项目经验,当然这都是我的想象和假设

相关推荐