【EAS常见问题】Transaction has been marked ROLLBACK ONLY somewhere原创
金蝶云社区-汪伟康
汪伟康
4人赞赏了该文章 10次浏览 未经作者许可,禁止转载编辑于2024年07月04日 15:01:08

问题现象:异常堆栈举例如下

Caused by: javax.resource.ResourceException: Transaction[XID:2085633F1E8447CDB73ED766E4ECB6FC/2085633F1E8447CDB73ED766E4ECB6FC] has been marked ROLLBACK ONLY somewhere!

at com.apusic.connector.cxmgr.AbstractConnectionPool.isValidTx(AbstractConnectionPool.java:35)


分析方法:

1、该类异常原因剖析

在获取数据库连接时,apusic连接池抛出异常(异常2),表示当前事务已经被某个地方标记成回滚了。

那么就是说在当前线程栈前面某个地方做了标记回滚。一般情况是出现了某些异常(异常1)才会被框架把当前事务标记回滚,但是并没有把异常往外抛出,线程继续往下执行,执行到下一次获取数据库连接时就会出现该异常异常2了。这个异常1才是真正问题原因。


2、我们需要怎么找到异常1堆栈信息呢?


一般情况下,我们先找到apusic日志的异常2堆栈信息,找到其线程名,然后搜索该线程名,在前面找到对应线程名的另一个异常堆栈信息就是异常1。


这是啥分析异常1的原因就可以了。


----------------

日志分析案例:

image.png



image.png



image.png

image.png

赞 4