4

我从管理控制台更改了 JTA 事务超时并将其设置为 300,即使更改失败后说 JTA 事务意外回滚(可能是由于超时),其原因如下:

weblogic.transaction.RollbackException: Transaction timed out after 181 seconds`

为了确保我的更改(超时值 300)是否反映在该域中,我在域下检查config.xml了它是否反映为 300。

我的问题是,还有其他地方我还需要更新事务超时值吗?我需要重新启动服务器吗?

来自以下服务器的异常后的完整堆栈跟踪:

引起:org.springframework.transaction.UnexpectedRollbackException:JTA事务意外回滚(可能是超时);嵌套异常是 weblogic.transaction.RollbackException: Transaction
 180 秒后超时
BEA1-160A800A149091F72E5E
    在 org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1031)
    在 org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:709)
    在 org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678)
    在 org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:359)
    在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    在 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    在 $Proxy103.saveRegistryData(未知来源)
    在 gov.cms.pqri.arch.submission.registry.bean.RegDataAccessManager.persistRegistry(RegDataAccessManager.java:54)
    ... 14 更多
原因:weblogic.transaction.RollbackException:事务在 180 秒后超时
BEA1-160A800A149091F72E5E
    在 weblogic.transaction.internal.TransactionImpl.throwRollbackException (TransactionImpl.java:1818)
    在 weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:333)
    在 weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:227)
    在 weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:281)
    在 org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1028)
    ... 22 更多
4

4 回答 4

4

在服务器 -> 配置 -> 调整(选项卡)下从管理控制台将卡住的线程最大时间更改为 300 后,它正在更新并且工作正常。

于 2010-02-15T21:29:02.173 回答
2

我也遇到过这个问题并解决了同样的问题,因为这与 JTA 事务有关,所以我们需要增加 JTA 的超时以及卡住最大线程的超时。请从 weblogic 控制台主页单击 JTA 并将 JTA 超时从30(by default) to 300.

于 2011-11-23T17:14:51.530 回答
2

我们在 Weblogic 12.1.2 上遇到了同样的问题 [JTA 事务意外回滚(可能是由于超时)] 经过所有调查,我们找到了问题的根本原因。在我看来,这是由于庞大的数据集处理事务性和接近尾声而发生的如果抛出异常,JTA 正在按预期回滚数据。但它没有给出错误的详细信息。在我们的例子中,它主要是由于数据库完整性引起的(例如,我们尝试将数据插入一个列比数据小。)

总之,这将是调查数据库日志而不是增加卡住的线程最大时间的最佳方法。线程最大时间可以是一个解决方案,但对于实际的企业系统来说不是一个合适的解决方案。

这个问题也在另一个stackover链接hibernate jira问题上讨论

解决方案建议:

这是 Weblogic JTA 实现的默认行为。要获得根异常,您应该将系统属性 weblogic.transaction.allowOverrideSetRollbackReason 设置为 true。

解决方案之一是将这一行添加到 /bin/setDomainEnv.cmd 中:

set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.transaction.allowOverrideSetRollbackReason=true
于 2018-01-10T05:35:31.367 回答
0

通过将 jta.properties 文件添加到我的应用程序的配置文件夹中,我的 JTA 超时增加了:

com.atomikos.icatch.default_jta_timeout=600000
com.atomikos.icatch.max_timeout=600000
于 2021-04-06T07:02:43.943 回答