Spring MVC =事务不再有效

时间:2017-03-07 13:21:13

标签: java sql spring spring-mvc oracle11g

我有一个基于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)

1 个答案:

答案 0 :(得分:2)

Oracle社区的根本原因:

  

通常,当交易完成时会发生这种情况,但事实是这样   忽略,应用程序尝试继续处理并发出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