我有一个基于Spring Web模型 - 视图 - 控制器(MVC)框架的项目。在WebLogic Server版本上部署的Spring Web模型 - 视图 - 控制器(MVC)框架的版本为3.2.8:12.1.2.0.0
我在1个查询中有这个错误
Caused By: java.lang.RuntimeException: java.sql.SQLException:
The transaction is no longer active - status: 'Marked rollback. [Reason=weblogic.transaction.internal.TimedOutException: Transaction timed out after 31 seconds
BEA1-000D9470C1367F28EDB9]'.
No further JDBC access is allowed within this transaction., criteria [ com.tdk.books.domain.ProductSearchCriteria@c5f15d5c ], sql [ select PRODUCT_ID from V_BOOKS where category_id = ? ]
即使我在服务方法
中设置超时10000@Transactional(timeout=10000, propagation = Propagation.REQUIRES_NEW)
答案 0 :(得分:2)
通常,当交易完成时会发生这种情况,但事实是这样 忽略,应用程序尝试继续处理并发出JDBC 发生在TX之外的语句。这个问题的根源 可以是通过序列传递的Connection对象 使用连接的方法。其中一种方法提交TX 从而使连接无效。
资源链接:https://community.oracle.com/thread/734370
有一些建议可以解决这个问题。
请尝试将您的weblogic数据源设置从Non-XA更改为 XA。你应该摆脱这个例外。
资源链接:The transaction is no longer active - status: 'Committed'
取消选中Supports Global Transactions重启服务器。
资源链接:In PRPC ERROR: The transaction is no longer active - status: 'Committed'
这个问题的真正解决方案是异步处理。但它 可能是因为它不适合你的情况。
第一个如果你正在对Oracle进行任何jdbc调用,那么你可以设置 在数据库上执行查询时查询超时。之后 查询超时,Oracle会给你一个你可以处理的异常 它。因此,基本上在这种情况下,您不会取消EJB请求 其实。但它可能会解决您的问题。
资源链接:https://coderanch.com/t/68079/transaction-rollback-commit