A服务调用B服务,无论是在A服务/B服手动务抛异常回滚事物仅第一次能回滚成功,第二次以后抛:com.mysql.cj.jdbc.MysqlXAException: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
部分测试代码(dubbo RPC 远程调用)
A服务代码
@Override
@GlobalTransactional
public void testXa() {
parameterExposeService.testSeataTransactional("test","test111");
new BusinessException("测试(XA)分布式事物回滚");
}
B 服务代码
@Override
public void testSeataTransactional(String code, String value) {
Parameter parameter = parameterDao.findFirstByCode(code);
if (Objects.isNull(parameter)){
parameter = new Parameter();
parameter.setCode(code);
}
parameter.setValue(value);
this.save(parameter);
}
Ⅱ. Describe what happened
第一次XA分布式回滚成功栈信息
A服务栈信息
2020-11-04 07:41:14.221 INFO 21309 --- [eoutChecker_1_1] i.s.c.r.netty.NettyClientChannelManager : will connect to 172.16.30.100:8091
2020-11-04 07:41:14.223 INFO 21309 --- [eoutChecker_1_1] i.s.core.rpc.netty.NettyPoolableFactory : NettyPool create channel to transactionRole:TMROLE,address:172.16.30.100:8091,msg:< RegisterTMRequest{applicationId='lion-upms-console-restful', transactionServiceGroup='lion-seata'} >
2020-11-04 07:41:14.227 INFO 21309 --- [eoutChecker_1_1] i.s.c.rpc.netty.TmNettyRemotingClient : register TM success. client version:1.4.0, server version:1.4.0,channel:[id: 0x84c9ab39, L:/172.16.30.1:46692 - R:/172.16.30.100:8091]
2020-11-04 07:41:14.228 INFO 21309 --- [eoutChecker_1_1] i.s.core.rpc.netty.NettyPoolableFactory : register success, cost 3 ms, version:1.4.0,role:TMROLE,channel:[id: 0x84c9ab39, L:/172.16.30.1:46692 - R:/172.16.30.100:8091]
2020-11-04 07:41:18.766 INFO 21309 --- [oundedElastic-1] com.alibaba.nacos.client.naming : new ips(1) service: 1.0.0-SNAPSHOT@@lion-oauth2-authorization-server -> [{"instanceId":"192.168.1.108#37233#DEFAULT#1.0.0-SNAPSHOT@@lion-oauth2-authorization-server","ip":"192.168.1.108","port":37233,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"1.0.0-SNAPSHOT@@lion-oauth2-authorization-server","metadata":{"preserved.register.source":"SPRING_CLOUD","version":"1.0.0-SNAPSHOT","group":"1.0.0-SNAPSHOT"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
2020-11-04 07:41:18.766 INFO 21309 --- [oundedElastic-1] com.alibaba.nacos.client.naming : current ips:(1) service: 1.0.0-SNAPSHOT@@lion-oauth2-authorization-server -> [{"instanceId":"192.168.1.108#37233#DEFAULT#1.0.0-SNAPSHOT@@lion-oauth2-authorization-server","ip":"192.168.1.108","port":37233,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"1.0.0-SNAPSHOT@@lion-oauth2-authorization-server","metadata":{"preserved.register.source":"SPRING_CLOUD","version":"1.0.0-SNAPSHOT","group":"1.0.0-SNAPSHOT"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
2020-11-04 07:41:20.371 INFO 21309 --- [o-auto-1-exec-1] io.seata.tm.TransactionManagerHolder : TransactionManager Singleton io.seata.tm.DefaultTransactionManager@585e0a7
2020-11-04 07:41:20.407 INFO 21309 --- [o-auto-1-exec-1] i.seata.tm.api.DefaultGlobalTransaction : Begin new global transaction [172.16.30.100:8091:67157855093919744]
2020-11-04 07:41:20.415 INFO 21309 --- [o-auto-1-exec-1] i.s.c.rpc.netty.RmNettyRemotingClient : will register resourceId:jdbc:mysql://127.0.0.1:3306/upms
2020-11-04 07:41:20.421 INFO 21309 --- [ctor_RMROLE_1_1] io.seata.rm.AbstractRMHandler : the rm client received response msg [version=1.4.0,extraData=null,identified=true,resultCode=null,msg=null] from tc server.
2020-11-04 07:41:21.689 INFO 21309 --- [o-auto-1-exec-1] i.seata.tm.api.DefaultGlobalTransaction : [172.16.30.100:8091:67157855093919744] rollback status: Rollbacked
com.lion.exception.BusinessException: 测试(XA)分布式事物回滚
at com.lion.upms.service.user.impl.UserServiceImpl.testXa(UserServiceImpl.java:148)
at com.lion.upms.service.user.impl.UserServiceImpl$$FastClassBySpringCGLIB$$9b5a95fe.invoke(<generated>)
B服务栈信息
2020-11-04 07:41:20.679 INFO 22385 --- [:20881-thread-3] i.s.c.rpc.netty.RmNettyRemotingClient : will register resourceId:jdbc:mysql://127.0.0.1:3306/common
2020-11-04 07:41:20.683 INFO 22385 --- [ctor_RMROLE_1_1] io.seata.rm.AbstractRMHandler : the rm client received response msg [version=1.4.0,extraData=null,identified=true,resultCode=null,msg=null] from tc server.
Hibernate: select parameter0_.id as id1_2_, parameter0_.create_date_time as create_d2_2_, parameter0_.create_user_id as create_u3_2_, parameter0_.update_date_time as update_d4_2_, parameter0_.update_user_id as update_u5_2_, parameter0_.version as version6_2_, parameter0_.code as code7_2_, parameter0_.name as name8_2_, parameter0_.remark as remark9_2_, parameter0_.value as value10_2_ from t_common_parameter parameter0_ where parameter0_.code=? limit ?
2020-11-04 07:41:21.048 TRACE 22385 --- [:20881-thread-3] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [test]
Hibernate: update t_common_parameter set update_date_time=?, version=? where id=?
2020-11-04 07:41:21.531 TRACE 22385 --- [:20881-thread-3] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [TIMESTAMP] - [2020-11-04T07:41:21.477]
2020-11-04 07:41:21.536 TRACE 22385 --- [:20881-thread-3] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [BIGINT] - [5]
2020-11-04 07:41:21.536 TRACE 22385 --- [:20881-thread-3] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [BIGINT] - [773449954579447808]
2020-11-04 07:41:21.630 INFO 22385 --- [h_RMROLE_1_1_32] i.s.c.r.p.c.RmBranchRollbackProcessor : rm handle branch rollback process:xid=172.16.30.100:8091:67157855093919744,branchId=67157856490622977,branchType=XA,resourceId=jdbc:mysql://127.0.0.1:3306/common,applicationData=null
2020-11-04 07:41:21.633 INFO 22385 --- [h_RMROLE_1_1_32] io.seata.rm.AbstractRMHandler : Branch Rollbacking: 172.16.30.100:8091:67157855093919744 67157856490622977 jdbc:mysql://127.0.0.1:3306/common
2020-11-04 07:41:21.637 INFO 22385 --- [h_RMROLE_1_1_32] i.s.rm.datasource.xa.ResourceManagerXA : 172.16.30.100:8091:67157855093919744-67157856490622977 was rolled back.
2020-11-04 07:41:21.639 INFO 22385 --- [h_RMROLE_1_1_32] io.seata.rm.AbstractRMHandler : Branch Rollbacked result: PhaseTwo_Rollbacked
2020-11-04 07:41:30.586 INFO 22385 --- [eoutChecker_1_1] i.s.c.r.netty.NettyClientChannelManager : will connect to 172.16.30.100:8091
2020-11-04 07:41:30.588 INFO 22385 --- [eoutChecker_1_1] i.s.core.rpc.netty.NettyPoolableFactory : NettyPool create channel to transactionRole:TMROLE,address:172.16.30.100:8091,msg:< RegisterTMRequest{applicationId='lion-common-expose-run', transactionServiceGroup='lion-seata'} >
2020-11-04 07:41:30.592 INFO 22385 --- [eoutChecker_1_1] i.s.c.rpc.netty.TmNettyRemotingClient : register TM success. client version:1.4.0, server version:1.4.0,channel:[id: 0xa26fccaf, L:/172.16.30.1:46742 - R:/172.16.30.100:8091]
2020-11-04 07:41:30.592 INFO 22385 --- [eoutChecker_1_1] i.s.core.rpc.netty.NettyPoolableFactory : register success, cost 2 ms, version:1.4.0,role:TMROLE,channel:[id: 0xa26fccaf, L:/172.16.30.1:46742 - R:/172.16.30.100:8091]
第二次XA分布式事物回滚出错异常栈信息
A服务栈信息
2020-11-04 07:52:27.853 INFO 21309 --- [o-auto-1-exec-4] i.seata.tm.api.DefaultGlobalTransaction : Begin new global transaction [172.16.30.100:8091:67160654586318848]
2020-11-04 07:52:27.908 INFO 21309 --- [h_RMROLE_1_1_32] i.s.c.r.p.c.RmBranchRollbackProcessor : rm handle branch rollback process:xid=172.16.30.100:8091:67160654586318848,branchId=67160654657622017,branchType=XA,resourceId=jdbc:mysql://127.0.0.1:3306/upms,applicationData=null
2020-11-04 07:52:27.909 INFO 21309 --- [h_RMROLE_1_1_32] io.seata.rm.AbstractRMHandler : Branch Rollbacking: 172.16.30.100:8091:67160654586318848 67160654657622017 jdbc:mysql://127.0.0.1:3306/upms
2020-11-04 07:52:27.916 INFO 21309 --- [h_RMROLE_1_1_32] i.s.rm.datasource.xa.ResourceManagerXA : 172.16.30.100:8091:67160654586318848-67160654657622017 rollback failed since XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
com.mysql.cj.jdbc.MysqlXAException: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
at com.mysql.cj.jdbc.MysqlXAConnection.mapXAExceptionFromSQLException(MysqlXAConnection.java:344) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:329) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.MysqlXAConnection.rollback(MysqlXAConnection.java:243) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at io.seata.rm.datasource.xa.ConnectionProxyXA.xaRollback(ConnectionProxyXA.java:108) ~[seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.datasource.xa.ResourceManagerXA.finishBranch(ResourceManagerXA.java:72) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.datasource.xa.ResourceManagerXA.branchRollback(ResourceManagerXA.java:58) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.AbstractRMHandler.doBranchRollback(AbstractRMHandler.java:125) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:67) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:63) [seata-all-1.4.0.jar:1.4.0]
at io.seata.core.exception.AbstractExceptionHandler.exceptionHandleTemplate(AbstractExceptionHandler.java:116) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.AbstractRMHandler.handle(AbstractRMHandler.java:63) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.DefaultRMHandler.handle(DefaultRMHandler.java:62) [seata-all-1.4.0.jar:1.4.0]
at io.seata.core.protocol.transaction.BranchRollbackRequest.handle(BranchRollbackRequest.java:35) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.AbstractRMHandler.onRequest(AbstractRMHandler.java:150) [seata-all-1.4.0.jar:1.4.0]
at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.handleBranchRollback(RmBranchRollbackProcessor.java:63) [seata-all-1.4.0.jar:1.4.0]
at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.process(RmBranchRollbackProcessor.java:58) [seata-all-1.4.0.jar:1.4.0]
at io.seata.core.rpc.netty.AbstractNettyRemoting.lambda$processMessage$2(AbstractNettyRemoting.java:278) [seata-all-1.4.0.jar:1.4.0]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_231]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_231]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-all-4.1.52.Final.jar:4.1.52.Final]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_231]
Caused by: java.sql.SQLException: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:764) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:323) ~[mysql-connector-java-8.0.21.jar:8.0.21]
... 19 common frames omitted
2020-11-04 07:52:27.917 INFO 21309 --- [h_RMROLE_1_1_32] io.seata.rm.AbstractRMHandler : Branch Rollbacked result: PhaseTwo_RollbackFailed_Retryable
2020-11-04 07:52:27.931 INFO 21309 --- [o-auto-1-exec-4] i.seata.tm.api.DefaultGlobalTransaction : [172.16.30.100:8091:67160654586318848] rollback status: RollbackRetrying
2020-11-04 07:52:27.934 WARN 21309 --- [o-auto-1-exec-4] i.s.tm.api.DefaultFailureHandlerImpl : Retrying to rollback transaction[172.16.30.100:8091:67160654586318848]
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.TransactionException: JDBC begin transaction failed:
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:448)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.startTransaction(AbstractPlatformTransactionManager.java:400)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:574)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:361)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at io.seata.spring.annotation.GlobalTransactionalInterceptor$2.execute(GlobalTransactionalInterceptor.java:184)
at io.seata.tm.api.TransactionalTemplate.execute(TransactionalTemplate.java:127)
at io.seata.spring.annotation.GlobalTransactionalInterceptor.handleGlobalTransaction(GlobalTransactionalInterceptor.java:181)
at io.seata.spring.annotation.GlobalTransactionalInterceptor.invoke(GlobalTransactionalInterceptor.java:150)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
at com.lion.upms.service.user.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$e143847d.testXa(<generated>)
at com.lion.upms.controller.test.TestController.testXa(TestController.java:48)
at com.lion.upms.controller.test.TestController$$FastClassBySpringCGLIB$$f5d45c80.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:100)
at com.lion.aop.PageRequestInjection.around(PageRequestInjection.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
at com.lion.aop.exception.RestulException.around(RestulException.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
at com.lion.aop.log.SystemLog.around(SystemLog.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
at com.lion.upms.controller.test.TestController$$EnhancerBySpringCGLIB$$306c065.testXa(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.lion.config.RequestBodyFilter.doFilter(FilterConfiguration.java:55)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:176)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at com.lion.resource.filter.AuthorizationIgnoreRemoveHeaderFilter.doFilter(AuthorizationIgnoreRemoveHeaderFilter.java:56)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.hibernate.TransactionException: JDBC begin transaction failed:
at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.begin(AbstractLogicalConnectionImplementor.java:78)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:282)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:246)
at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:83)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:184)
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:402)
... 154 more
Caused by: java.sql.SQLException: failed to start xa branch 172.16.30.100:8091:67160654586318848 since XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
at io.seata.rm.datasource.xa.ConnectionProxyXA.setAutoCommit(ConnectionProxyXA.java:146)
at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.begin(AbstractLogicalConnectionImplementor.java:72)
... 159 more
Caused by: com.mysql.cj.jdbc.MysqlXAException: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
at com.mysql.cj.jdbc.MysqlXAConnection.mapXAExceptionFromSQLException(MysqlXAConnection.java:344)
at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:329)
at com.mysql.cj.jdbc.MysqlXAConnection.start(MysqlXAConnection.java:290)
at io.seata.rm.datasource.xa.ConnectionProxyXA.setAutoCommit(ConnectionProxyXA.java:143)
... 160 more
Caused by: java.sql.SQLException: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:764)
at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648)
at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:323)
... 162 more
2020-11-04 07:52:28.210 INFO 21309 --- [h_RMROLE_1_2_32] i.s.c.r.p.c.RmBranchRollbackProcessor : rm handle branch rollback process:xid=172.16.30.100:8091:67160654586318848,branchId=67160654657622017,branchType=XA,resourceId=jdbc:mysql://127.0.0.1:3306/upms,applicationData=null
2020-11-04 07:52:28.210 INFO 21309 --- [h_RMROLE_1_2_32] io.seata.rm.AbstractRMHandler : Branch Rollbacking: 172.16.30.100:8091:67160654586318848 67160654657622017 jdbc:mysql://127.0.0.1:3306/upms
2020-11-04 07:52:28.211 INFO 21309 --- [h_RMROLE_1_2_32] i.s.rm.datasource.xa.ResourceManagerXA : 172.16.30.100:8091:67160654586318848-67160654657622017 rollback failed since XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
com.mysql.cj.jdbc.MysqlXAException: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
at com.mysql.cj.jdbc.MysqlXAConnection.mapXAExceptionFromSQLException(MysqlXAConnection.java:344) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:329) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.MysqlXAConnection.rollback(MysqlXAConnection.java:243) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at io.seata.rm.datasource.xa.ConnectionProxyXA.xaRollback(ConnectionProxyXA.java:108) ~[seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.datasource.xa.ResourceManagerXA.finishBranch(ResourceManagerXA.java:72) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.datasource.xa.ResourceManagerXA.branchRollback(ResourceManagerXA.java:58) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.AbstractRMHandler.doBranchRollback(AbstractRMHandler.java:125) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:67) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:63) [seata-all-1.4.0.jar:1.4.0]
at io.seata.core.exception.AbstractExceptionHandler.exceptionHandleTemplate(AbstractExceptionHandler.java:116) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.AbstractRMHandler.handle(AbstractRMHandler.java:63) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.DefaultRMHandler.handle(DefaultRMHandler.java:62) [seata-all-1.4.0.jar:1.4.0]
at io.seata.core.protocol.transaction.BranchRollbackRequest.handle(BranchRollbackRequest.java:35) [seata-all-1.4.0.jar:1.4.0]
at io.seata.rm.AbstractRMHandler.onRequest(AbstractRMHandler.java:150) [seata-all-1.4.0.jar:1.4.0]
at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.handleBranchRollback(RmBranchRollbackProcessor.java:63) [seata-all-1.4.0.jar:1.4.0]
at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.process(RmBranchRollbackProcessor.java:58) [seata-all-1.4.0.jar:1.4.0]
at io.seata.core.rpc.netty.AbstractNettyRemoting.lambda$processMessage$2(AbstractNettyRemoting.java:278) [seata-all-1.4.0.jar:1.4.0]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_231]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_231]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-all-4.1.52.Final.jar:4.1.52.Final]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_231]
Caused by: java.sql.SQLException: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:764) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648) ~[mysql-connector-java-8.0.21.jar:8.0.21]
at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:323) ~[mysql-connector-java-8.0.21.jar:8.0.21]
... 19 common frames omitted
Ⅲ. Describe what you expected to happen
Ⅳ. How to reproduce it (as minimally and precisely as possible)
Ⅰ. Issue Description
1.4 版XA模式同一接口第二次分布式事物回滚出错,仅第一次能回滚成功(短时间多次调用会出此错)
如果第一次调用成功后间隔一分半钟再此调用第二次XA事物回滚则能正常,否则将出现以下错误 ps:目前仅测试间隔近一分半钟的时间,其余间隔时间未测试
A服务调用B服务,无论是在A服务/B服手动务抛异常回滚事物仅第一次能回滚成功,第二次以后抛:com.mysql.cj.jdbc.MysqlXAException: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
部分测试代码(dubbo RPC 远程调用) A服务代码
B 服务代码
Ⅱ. Describe what happened
第一次XA分布式回滚成功栈信息 A服务栈信息
B服务栈信息
第二次XA分布式事物回滚出错异常栈信息 A服务栈信息
Ⅲ. Describe what you expected to happen
Ⅳ. How to reproduce it (as minimally and precisely as possible)
Ⅴ. Anything else we need to know?
Ⅵ. Environment: