【EAS后台事务】后台事务失败问题--Can't commit, because No Transaction原创
13人赞赏了该文章
103次浏览
编辑于2024年10月14日 10:52:04
问题表现:后台事务执行大概1小时变为失败状态,报错堆栈关键信息为:
Caused by: java.lang.IllegalStateException: Can't commit, because No Transaction at com.apusic.transaction.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:215) at com.apusic.ejb.container.Container.postInvokeTx(Container.java:2064) ... 16 more Caused by: org.omg.CosTransactions.NoTransaction: IDL:omg.org/CosTransactions/NoTransaction:1.0 at com.apusic.transaction.ots.TransactionCurrent.commit(TransactionCurrent.java:210) at com.apusic.transaction.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:209) ... 17 more
案例截图:
原因分析:上述报错是由于当前事务超过了框架限制默认事务超时时间1小时导致。
解决建议:
思路:需要对应开发从代码层面去分析事务超时原因,优化代码/sql减小单个事务的持续时间。
举例:如后台事务中时调用的facade方法。
1、将当前facade1的事务属性定义为ReuiredNew
2、新增一个facade2,事务属性定义为NOSUPPORTS
3、然后facade2的方法中分批循环调用facade1的方法,那么还需要把原来facade1中的代码做修改为单批处理。
4、后台事务中配置修改为facade2。
这样保证每次循环调用facade2方法都是在一个新的事务中,只要facade2中事务不超时即可。
-------------------------------------
实在没办法再来考虑修改框架的事务容器超时时间限制:
赞 13
13人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读