Springboot,Activiti,Atomikos:
com.atomikos.datasource.xa.session.InvalidSessionHandleStateException: Transaction is marked for rollback only or has timed out
at com.atomikos.datasource.xa.session.NotInBranchStateHandler.checkEnlistBeforeUse(NotInBranchStateHandler.java:39)
at com.atomikos.datasource.xa.session.TransactionContext.checkEnlistBeforeUse(TransactionContext.java:70)
at com.atomikos.datasource.xa.session.SessionHandleState.notifyBeforeUse(SessionHandleState.java:160)
at com.atomikos.jdbc.AtomikosConnectionProxy.enlist(AtomikosConnectionProxy.java:207)
at com.atomikos.jdbc.AtomikosConnectionProxy.invoke(AtomikosConnectionProxy.java:122)
确认了bug原因:一开始由于并发导致了事务回滚,然后事务状态被标记为rollback,JTA中线程和事务状态是绑定关系,在线程被回收之前,这个线程所有调用oracle连接的sql,都会报rollback异常,直到线程被销毁。
看了下setRollbackOnly ()方法,发现最后是会把状

在Springboot和Activiti中使用Atomikos时,遇到并发导致事务被标记为rollback only。线程一旦被回收前,所有相关查询会报错。尽管setRollbackOnly()方法理论上会将状态改为Active,但在Atomikos中异常处理仅限于日志记录,导致事务状态无法恢复,引发后续处理错误。
最低0.47元/天 解锁文章
9752

被折叠的 条评论
为什么被折叠?



