背景:同一条线程下,全局事务A调用了REQUIRES_NEW的全局事务B
问题:
- B的TransactionHook会被正常调用
- A的TransactionHook部分方法不会被调用中,包括:afterPrepare、beforeCommit、afterCommit、beforeRollback、afterRollback、afterCompletion
A、B全局事务的钩子都需要被正常回调
示例代码如下:
public void test() {
TransactionHookManager.registerHook(aHook); //注册钩子A
a(); //调用分布式事务A
}
@GlobalTransactional
public void a() {
TransactionHookManager.registerHook(bHook); //注册钩子B
b(); //同一个线程调用分布式事务B
}
@GlobalTransactional(propagation = Propagation.REQUIRES_NEW) // propagation为REQUIRES_NEW
public void b() {
//do something
}
问题分析:在B事务结束时,清理了所有的TransactionHook,具体代码如下(cleanUp这一行)。这个逻辑会把A事务的钩子也误清理了。