【发布时间】:2014-05-27 00:38:19
【问题描述】:
在我的 Web 应用程序中,我使用 OpenJPA。有时当我进行数据库操作时,我会得到这个异常:
javax.servlet.ServletException: javax.el.ELException: javax.ejb.EJBTransactionRolledbackException: Transaction was rolled back, presumably because setRollbackOnly was called during a synchronization
有根案例:
org.apache.geronimo.transaction.manager.SetRollbackOnlyException: setRollbackOnly() called. See stacktrace for origin
问题是:如何获取事务中抛出的异常的堆栈跟踪?
我看这里
- https://issues.apache.org/jira/browse/GERONIMO-4576
- https://issues.apache.org/jira/browse/OPENEJB-782
- https://issues.apache.org/jira/browse/OPENEJB-980
但我不明白。
我认为每次尝试将大文件(超过 2MB)保存到数据库表时都会出现此异常。
【问题讨论】:
-
我认为您应该从某些 EJB 中捕获异常并将它们进一步抛出,而不是尝试执行其他 EntityManager 操作。根据 EJB 规范,如果使用容器管理器事务范围的 EntityManager,如果发生任何异常(与
query.getSingleResult()相关的一些异常除外),事务将自动回滚,这可能是您的情况。
标签: java jpa transactions openjpa openejb