我正在追逐一个问题,我看到SQL语句在事务中的数据库日志中运行,然后看到该事务回滚。
在Oracle和Postgres上都会发生这种情况,但仅限于某些安装。应用程序本身是使用JPA和Eclipselink的非常标准的J2EE应用程序。
我没有看到任何异常,代码也没有明确放弃和回滚。
我能做到的最好的事情是找到这个日志声明:
[#|2011-09-26T11:30:56.052-0700|FINER|sun-appserver2.1|org.eclipse.persistence.session.file:/opt/glassfish/domains/domain1/applications/j2ee-apps/myapp/myapp-ejb_jar/_myapp-ejbPU.transaction|_ThreadID=18;_ThreadName=httpSSLWorkerThread-8888-2;ClassName=null;MethodName=null;_RequestID=e78196
09-bf2e-4026-8cbb-87fdd047c5eb;|begin unit of work flush|#]
它与postgres日志中的ROLLBACK完全相同:
appuser @ dbname: 102012/7/67486 2011-09-26 18:30:56.052 UTC - LOG: execute S_3: ROLLBACK
请注意,当应用程序位于Pacific时,数据库处于UTC状态。
使用@TransactionAttribute(TransactionAttributeType.SUPPORTS)
我正在使用日志记录级别和调试器来查看是否可以找到可能导致此错误的抛出和吞没的异常。
如何找出导致回滚的代码?
答案 0 :(得分:2)
您可以使用EclipseLink启用最好的日志记录来调试问题。 将记录EclipseLink中发生的任何异常。
请参阅, http://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging
另外,请确保不会引发错误以导致SessionBean回滚。