我从管理控制台更改了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
答案 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 link和hibernate 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