java - weblogic.transaction.internal.AppSetRollbackOnlyException : setRollbackOnly called on transaction

标签 java transactions ejb

我有以下情况,我调用 BeanA 的 doSomeTask() 但如果 doSomeTask() 失败,我想将 ErrorInfo 保存到另一个表中并调用 BeanA 的 saveError(ErrorInfo) 。它们都有@TransactionAttribute(REQUIRES_NEW)。

class BeanA {

    @TransactionAttribute(REQUIRES_NEW)
    public void doSomeTask(){

       if(someCondition){
          throw new SomeException();
       }

       // do task  
    } 

    @TransactionAttribute(REQUIRES_NEW)
    public void saveError(ErrorInfo error) {
          // save error info if doSomeTask fails
    }
}

 class BeanB {

     BeanA beanA;

     void performTask(){
           try{
              beanA.doSomeTask();     
            }catch(Exception e){
              ErrorInfo error = getErrorInfo(e)
              beanA.saveError(error);  
            }
     }   
 }

但是当 doSomeTask() 抛出异常时 saveError() 不起作用并抛出异常

Caused by: weblogic.transaction.internal.AppSetRollbackOnlyException: setRollbackOnly called on transaction

我做错了什么以及如何修复此错误?预先感谢您的任何帮助。

最佳答案

抱歉,回复晚了。问题解决了。

实际错误已被隐藏。就我而言,实际错误只是在保留时 ErrorInfo 实例的 JSR 303 验证错误。必须添加

Dweblogic.transaction.allowOverrideSetRollbackReason=true

关于<domain_home>/bin/setDomainEnv.sh找出实际的错误并修复它。感谢这个答案https://stackoverflow.com/a/38584687/1563286

关于java - weblogic.transaction.internal.AppSetRollbackOnlyException : setRollbackOnly called on transaction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47082098/

相关文章:

java - Spring-JDBC中的隔离级别SERIALIZABLE

java - EJB 无接口(interface) View 测试(arquillain 和 mockito)

java - InitialContext.doLookup 两次调用 Bean 的构造函数

java - 使用 JFileChooser 添加多个文件

java - 为什么在我的java代码中出现异常后回滚操作没有完成

java - tomcat docker容器在停止tomcat服务器后停止并退出

php - 在 MySQL 事务中保留自动增量 ID

oop - 在 EJB<->JSF2 应用程序中重用服务器端和客户端的实体

java - 在离开字段时,而不是在 Vaadin 8 Binder 中输入用户类型时,更少地运行 validator

java - 将字节转换为带符号字节的字符串