我有以下情况,我调用 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/