JTA事务超时异常 - weblogic 10.X

时间:2010-02-11 19:52:30

标签: timeout weblogic transactions jta

我从管理控制台更改了JTA事务超时并设置为300,即使在更改后也无法通过以下方式意外回滚(可能是由于超时):

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

为了确定我的更改(超时值300)是否已针对该域反映,我在域config.xml下进行了检查,结果反映为300.

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

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

Caused by: org.springframework.transaction.UnexpectedRollbackException: JTA transaction unexpectedly rolled back (maybe due to a timeout); nested exception is weblogic.transaction.RollbackException: Transaction
 timed out after 180 seconds
BEA1-160A800A149091F72E5E
    at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1031)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:709)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:359)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy103.saveRegistryData(Unknown Source)
    at gov.cms.pqri.arch.submission.registry.bean.RegDataAccessManager.persistRegistry(RegDataAccessManager.java:54)
    ... 14 more
Caused by: weblogic.transaction.RollbackException: Transaction timed out after 180 seconds
BEA1-160A800A149091F72E5E
    at weblogic.transaction.internal.TransactionImpl.throwRollbackException(TransactionImpl.java:1818)
    at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:333)
    at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:227)
    at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:281)
    at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1028)
    ... 22 more

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我们在Weblogic 12.1.2上遇到了同样的问题[JTA事务意外地回滚(可能由于超时)]在所有调查之后我们找到了问题的根本原因。在我看来,这是由于巨大的数据集处理事务和接近流程结束如果抛出异常,JTA会按预期回滚数据。但是它没有给出错误的详细信息。在我们的例子中,它主要是因为数据库的完整性(例如我们尝试插入数据)尺寸小于数据的列。)

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

此问题也在another stackover linkhibernate jira issue

上进行了讨论

解决方案建议:

  

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

     

其中一个解决方案是添加此行   /bin/setDomainEnv.cmd:

set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.transaction.allowOverrideSetRollbackReason=true

答案 3 :(得分:0)

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

com.atomikos.icatch.default_jta_timeout=600000
com.atomikos.icatch.max_timeout=600000