(第7天)每日源码调试之旅--实现CQRS模式的AXON框架

8 篇文章 0 订阅

接着前一天的调试,断点来到LockingRepository的prepareForCommit方法:

此处先保证持有锁,然后进入父类AbstractRepository的prepareForCommit(用Current UnitOfWord注册handlers,用于在UnitOfWork提交后保存或删除所给的aggregate)方法:

此处添加CurrentUnitOfWork的保存或者删除操作回调,以便稍后调用,直接返回,结束两个prepareForCommit方法,回到AbstractRepository的newInstance方法:

返回得到的LockAwareAggregate实例,回到AggregateConstructorCommandHandler的handle方法,开始解析handle操作的返回结果:

此处返回AggregateAnnotationCommandHandler的resolveReturnValue方法的处理结果:

得到的是创建的聚合类的标志符,即Id,继续返回,结束handle方法,结束此处DefaultInterceptorChain的proceed方法,结束CorrelationDataInterceptor的handle方法,回到DefaultUnitOfWork的executeWithResult方法:

task.call得到的结果聚合类id赋值给result,进入ExecutionResult的构造器:

新建包含result的ExecutionResult实例,接着进入DefaultUnitOfWork的setExecutionResult方法:

此方法调用MessageProcessingContext(维护围绕单个消息处理的上下文,当UnitOfWork处理消息的过程过渡到下一阶段时提醒handlers)的setExecutionResult(设置处理当前message的执行结果,如果上下文存在先前设置的执行结果,只有当新的处理结果是一个异常结果时才允许设置,如果先前设置的也是一个异常结果,新执行结果中的异常作为被抑制的异常添加到原始异常中)方法:

设置完毕后返回,结束所有setExecutionResult方法,进入AbstractUnitOfWork的commit方法:

此处先保证UnitOfWork已经开启,并且是Current UnitOfwork,当UnitOfWork没有parent时,进入AbstractUnitOfWork的commitAsRoot方法:

首先调用AbstractUnitOfWork的changePhase方法:

先设置DefaultUnitOfWork的phase为PREPARE_COMMIT,接着进入DefaultUnitOfWork的notifyHandlers方法:

调用MessageProcessingContext的notifyHandlers(调用集合中关联到给定阶段的handlers)方法

此处细节不提,直接跳到之前eventsQueue中设置的PREPARE_COMMIT阶段的回调:

先暂停,明天重点分析这个4个阶段的回调干了什么。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值