【问题标题】:javax.ejb.EJBTransactionRolledbackException - get stacktrace for originjavax.ejb.EJBTransactionRolledbackException - 获取源的堆栈跟踪
【发布时间】: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

问题是:如何获取事务中抛出的异常的堆栈跟踪?

我看这里

但我不明白。

我认为每次尝试将大文件(超过 2MB)保存到数据库表时都会出现此异常。

【问题讨论】:

  • 我认为您应该从某些 EJB 中捕获异常并将它们进一步抛出,而不是尝试执行其他 EntityManager 操作。根据 EJB 规范,如果使用容器管理器事务范围的 EntityManager,如果发生任何异常(与 query.getSingleResult() 相关的一些异常除外),事务将自动回滚,这可能是您的情况。

标签: java jpa transactions openjpa openejb


【解决方案1】:

我建议将此properties 设置在您的persistece.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="laudoweb_pu">
        <jta-data-source>jdbc/integracaolaudoweb</jta-data-source>
        <class>com.xxx.xxxEntity</class>
        <properties>
            <property name="openjpa.jdbc.DBDictionary" value="oracle" />
            <property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/>
            <property name="openjpa.AutoDetach" value="close" />
            <property name="openjpa.DetachState" value="loaded" />
            <property name="openjpa.DataCache" value="false" />
            <property name="openjpa.Optimistic" value="true" />
            <property name="openjpa.Multithreaded" value="true" />
            <property name="openjpa.TransactionMode" value="managed" />
            <property name="openjpa.ConnectionFactoryMode" value="managed" />
            <property name="openjpa.NontransactionalRead" value="true" />
            <property name="openjpa.RestoreState" value="all" />
            <property name="openjpa.ManagedRuntime" value="auto" />
        </properties>
    </persistence-unit>
</persistence>

这里是openjpalogs 和其他properties 的文档。

http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/ref_guide_logging_openjpa.html

主要是这一行对于logtrace很重要:

 <property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/>

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2010-11-10
    • 2018-08-10
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多