解读tcc-transaction

首先看TccCompensableAspect这个类,所有带有@Compensable注解的方法在调用之前会调用CompensableTransactionInterceptor类中的interceptCompensableMethod方法,该方法会根据transactionContext是否为空来判断是tcc服务的主调用方。如果是主调用方,则会调用rootMethodProceed方法,该方法会将事务信息持久化并存于threadlocal中,此时事务状态为TRYING。在经过TccCompensableAspect拦截后,程序会被TccTransactionContextAspect所拦截,然后调用ResourceCoordinatorInterceptor类中的interceptTransactionContextMethod方法,该方法会将调用方的confirm与cancel方法写进当前事务。程序继续往下执行调用从业务方逻辑会将transactionContext传入,带有transactionContext的方法也会被TccTransactionContextAspect所拦截,然后调用ResourceCoordinatorInterceptor类中的interceptTransactionContextMethod方法,该方法会判断是主调用方还是从调用方,此时会执行generateAndEnlistConsumerParticipant方法,该方法会给transactionContext赋值。继续往下,会调用从业务方业务。。。未完待续!

posted on 2017-02-17 16:54  kingglory  阅读(763)  评论(1)    收藏  举报

导航