私はBeanAのdoSomeTask()を呼び出しますが、doSomeTask()が失敗した場合、別のテーブルにErrorInfoを保持してsaveError(ErrorInfo )のBeanA。どちらも@TransactionAttribute(REQUIRES_NEW)を持っています。weblogic.transaction.internal.AppSetRollbackOnlyException:トランザクションでsetRollbackOnlyが呼び出されました
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
私は何を間違っているし、どのようにこのエラーを修正するのですがスローされないのですか?助けを前にありがとう。
スパニングトランザクションはありますか? –
いいえ、performTask()は、私が知る限り、トランザクションではありません。 –
あなたのBeanAはコンテナで注入されていますか?私。あなたは "BeanA beanA;"に@EJBアノテーションを持っていますか? ? – user3714601