Open h976353715 opened 5 years ago
自己改一点: diff --git a/txlcn-tc/src/main/java/com/codingapi/txlcn/tc/core/template/TransactionControlTemplate.java b/txlcn-tc/src/main/java/com/codingapi/txlcn/tc/core/template/TransactionControlTemplate.java index 3e8cbb3f..2dc713ed 100644 --- a/txlcn-tc/src/main/java/com/codingapi/txlcn/tc/core/template/TransactionControlTemplate.java +++ b/txlcn-tc/src/main/java/com/codingapi/txlcn/tc/core/template/TransactionControlTemplate.java @@ -153,7 +153,7 @@ public class TransactionControlTemplate { dtxExceptionHandler.handleNotifyGroupMessageException(Arrays.asList(groupId, state, unitId, transactionType), e); } catch (LcnBusinessException e) { // 关闭事务组失败
5.02版本,我在发起方打个断点后,出现如下提示 java.lang.NullPointerException: null at com.codingapi.txlcn.tc.core.checking.DefaultDTXExceptionHandler.handleNotifyGroupBusinessException(DefaultDTXExceptionHandler.java:93) at com.codingapi.txlcn.tc.core.template.TransactionControlTemplate.notifyGroup(TransactionControlTemplate.java:156) at com.codingapi.txlcn.tc.core.transaction.lcn.control.LcnStartingTransaction.postBusinessCode(LcnStartingTransaction.java:69) at com.codingapi.txlcn.tc.core.DTXServiceExecutor.transactionRunning(DTXServiceExecutor.java:108) at com.codingapi.txlcn.tc.aspect.weave.DTXLogicWeaver.runTransaction(DTXLogicWeaver.java:96) at com.codingapi.txlcn.tc.aspect.TransactionAspect.runWithLcnTransaction(TransactionAspect.java:93) at sun.reflect.GeneratedMethodAccessor454.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45005) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
查看TM发现如下内容 com.codingapi.txlcn.common.exception.TxManagerException: attempts to join the non-existent transaction group. [a877583242a2f7bf53918f6f4fe657c4@erp-flowable] at com.codingapi.txlcn.tm.txmsg.transaction.JoinGroupExecuteService.execute(JoinGroupExecuteService.java:73) ~[classes!/:5.0.2.RELEASE] at com.codingapi.txlcn.tm.txmsg.ServerRpcAnswer.lambda$callback$0(ServerRpcAnswer.java:71) ~[classes!/:5.0.2.RELEASE] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_211] at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_211] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_211] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_211] at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_211]
而且后续,所有业务都无法进行下去了。急求解决
我已经按照上述代码改了源码,重新测试还是不行
我已经按照上述代码改了源码,重新测试还是不行
调用方注解事务级别设置成required
调用方已经是required了,改了测试还是不行。且场景容易重现,比如可以再调用方估计打个断点,然后等待超时,超时后就出现这个清情况了。而且之后及时去掉断点,接口无法请求,报同样的错误。
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) @LcnTransaction @Override public void commit(AgentContractInput input, Long userId) {
我尝试断点追踪发现 ex是null,我该如何解决,我可以如果是null直接给state=0吗?尝试修改若是null直接给0发现发起方事务回滚了。可是被调用方,事务没回滚。产生了数据
我尝试断点追踪发现 ex是null,我该如何解决,我可以如果是null直接给state=0吗?尝试修改若是null直接给0发现发起方事务回滚了。可是被调用方,事务没回滚。产生了数据
@LcnTransaction(propagation = DTXPropagation.REQUIRED) 中加,对于数据库超时请回到我的那问题,重写TransactionControlTemplate 的 notifyGroup 方法 catch (LcnBusinessException e) { // 关闭事务组失败 dtxExceptionHandler.handleNotifyGroupBusinessException(Arrays.asList(groupId, state, unitId, transactionType), e); }
我尝试断点追踪发现 ex是null,我该如何解决,我可以如果是null直接给state=0吗?尝试修改若是null直接给0发现发起方事务回滚了。可是被调用方,事务没回滚。产生了数据 tx服务端 事务时间设置长一点,如果超过此长度分布式事务就无法生效
# 分布式事务执行总时间(ms). 默认为36000 tx-lcn.manager.dtx-time=60000
好的,晓得了。其实我可以理解成,如果在分布式事务中,总耗时大于tx-lcn.manager.dtx-time设置的时间,其实事务是不起作用的对吧。
好的,晓得了。其实我可以理解成,如果在分布式事务中,总耗时大于tx-lcn.manager.dtx-time设置的时间,其实事务是不起作用的对吧。
是的
这个问题怎么解决那,是设置事务执行总时间长一点,还是修改代码ex为null的时候,返回state=0。这个问题应该不是超时引起的把,我执行时间应该没有超时,但是还是关闭失败,报空指针了
1. Bug Description
2. Environment:
3. Exception Stacktrace
4. Tour Idea