java - 如何获取 UnexpectedRollbackException 的 SQL 错误来源

标签 java oracle hibernate exception transactions

我的服务“duplicateContract”出现 hibernate 回滚异常

Caused by: org.springframework.transaction.UnexpectedRollbackException: JTA transaction unexpectedly rolled back (maybe due to a timeout); nested exception is javax.transaction.RollbackException
    at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1031)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:732)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy128.duplicateContracts(Unknown Source)
    at com.test.server.rpc.SrvContractImpl.duplicateContracts(SrvContractImpl.java:699)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
    ... 34 more
Caused by: javax.transaction.RollbackException
    at org.objectweb.jotm.TransactionImpl.commit(TransactionImpl.java:329)
    at org.objectweb.jotm.Current.commit(Current.java:485)
    at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1028)
    ... 47 more

问题是,我无法调试它,某个地方的持久对象有错误,但我不知道(这不是超时或缺少 @Transactional )。我怎样才能得到这个异常(exception)的更多细节? (也许在 oracle 日志中的某处?但是在哪里?)。

最佳答案

我检查了 JOTM 源代码,令我惊讶的是,they don't propagate the original exception .

try {
    propagateCtx = false;
    term.commit(true);
    propagateCtx = true;
} catch (TransactionRolledbackException e) {
    Current.getCurrent().forgetTx(getXid());
    if (TraceTm.jta.isDebugEnabled()) {
        TraceTm.jta.debug("Commit distributed transaction -> rolled back!");
    }
    localstatus = Status.STATUS_ROLLEDBACK;
    throw new RollbackException();
} 
...

JOTM项目开发seems to have stopped (最后两个版本可追溯到 2006 年和 2010 年),因此您最好查看 Narayana , AtomikosBitronix .

关于java - 如何获取 UnexpectedRollbackException 的 SQL 错误来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35268411/

相关文章:

java - 在接口(interface)中创建两个通用参数

脚本的mysql脚本

mysql - 如何在 apache Drill 中使用 sysdate

hibernate - 在 PostgreSQL 和 SpringBoot (JPA) 中创建序列的问题

java - Instant Messenger,Java 基础项目

java - 如何在 Azure 中使用 Java 创建/删除 HDI 集群

java - g选择:如何从一个列表中提取值并从另一个列表中显示选项?

java - 将日期转换为全文

java - Hibernate 按查询分组

java - 更新查询,工作正常但不是我的 dao 类