Ama*_*les 3 java sql spring spring-mvc oracle11g
我有一个基于 Spring Web 模型-视图-控制器 (MVC) 框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8,部署在WebLogic Server上版本: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 = ? ]
Run Code Online (Sandbox Code Playgroud)
即使我在服务方法中设置了 10000 的超时
@Transactional(timeout=10000, propagation = Propagation.REQUIRES_NEW)
Run Code Online (Sandbox Code Playgroud)
通常,当事务完成时会发生这种情况,但这一事实会被忽略,并且应用程序会尝试继续处理并发出在 TX 之外发生的 JDBC 语句。此问题的根源可能是通过一系列使用该连接的方法传递的 Connection 对象。其中一种方法会提交 TX,从而使连接无效。
资源链接:https ://community.oracle.com/thread/734370
找到了一些解决问题的建议。
请尝试将您的 weblogic 数据源设置从非 XA 更改为 XA。你应该摆脱这个异常。
资源链接: 交易不再活跃 - 状态:“已提交”
取消选中支持全局事务重新启动服务器。
资源链接:在 PRPC 错误中:事务不再活动 - 状态:“已提交”
真正解决这个问题的是异步处理。但它可能不适合您的情况。
第一个如果您要对 Oracle 进行任何 jdbc 调用,那么您可以在数据库上执行查询时设置查询超时。并且查询超时后,Oracle会给你一个异常,你可以处理它。所以基本上在这种情况下您实际上并没有取消您的 EJB 请求。但它可能会解决你的问题。
资源链接:https://coderanch.com/t/68079/transaction-rollback-commit
| 归档时间: |
|
| 查看次数: |
9937 次 |
| 最近记录: |