分析的项目为 https://github.com/changmingxie/tcc-transaction
在项目为dubbo搭配使用,因此全文是在dubbo服务环境进行分析。
- 首先tcc如何实现分布式服务的事务一致性的,配置使用的指南中,主要通过Compensable注解开始,首先找到注解的切面,有两个切面,tcc-transaction-spring 的 tcc-transaction.xml配置如下:
<!-- 初始化compensable事物切面 -->
<bean id="compensableTransactionAspect" class="org.mengyun.tcctransaction.spring.ConfigurableTransactionAspect"
init-method="init">
<property name="transactionConfigurator" ref="transactionConfigurator"/>
</bean>
<!-- 初始化compensable事物切面 -->
<bean id="resourceCoordinatorAspect" class="org.mengyun.tcctransaction.spring.ConfigurableCoordinatorAspect"
init-method="init">
<property name="transactionConfigurator" ref="transactionConfigurator"/>
</bean>
根据getOrder()方法的值,能知道ConfigurableTransactionAspect先行发生于ConfigurableCoordinatorAspect,这一点很重要,他们分别进行了继承操作
@Aspect
public class ConfigurableTransactionAspect extends CompensableTransactionAspect implements Ord