我们项目组使用了seata1.5.2版本,在研发seata监控的时候,用到了TM的HOOK机制,但是在使用上发现一些问题
- 同一个线程中出现多个@GlobalTransactional,每个@GlobalTransactional都会执行钩子方法,不论是TM的发起者还是参与者,很多时候我们只需要发起者执行钩子方法,不需要参与者执行钩子,这里根本无法进行判断区分
- 同一个线程的最后一个@GlobalTransactional在执行完afterCompletion后会将注册的hook对象删除(cleanUp方法),导致其他@GlobalTransactional无法成功执行hook后处理方法
优化建议:
- 优化钩子方法(beforeBegin、afterBegin、beforeCommit、afterCommit、beforeRollback、afterRollback、afterCompletion)
所有钩子方法新增入参GlobalTransaction tx,这样就能判断到底是发起者还是参与者调用了 - 在TransactionalTemplate执行完commit/rollback之后,会进行cleanUp操作(删除hook对象),这个不太合理,这里希望能用java-spi的方式重写cleanUp方法,并且cleanUp方法新增入参GlobalTransaction tx,这样我们就能对cleanUp进行重写(spi的方式)
4条答案
按热度按时间pb3skfrl1#
@412165137lzh I agree with your idea. Could you submit a pr to optimize it ?
hof1towb2#
#5073 The second point is consistent with this issue
z9smfwbn3#
#5073 The second point is consistent with this issue
get it
wvyml7n54#
@412165137lzh I agree with your idea. Could you submit a pr to optimize it ?
thx,I will submit later when I am free