2014-04-07 3 views
0

를 최대 절전 모드로 봄 +에 새 트랜잭션을 생성하지 않으며REQUIRES_NEW이 나는 봄이와 응용 프로그램 (모두 최신 버전) 최대 절전 모드

@Component 
public class Bean1{ 

@Autowired 
Bean2 bean2; 

@Transactional(propagation = Propagation.REQUIRED) 
public void foo() 
{ 
    bean2.bar(); 
} 


@Component 
public class Bean2{ 

@Transactional(propagation = Propagation.REQUIRES_NEW) 
public void bar() 
{ 
    try{ 
      // Do something which throws exception 
    } 
    catch (Exception e) { 
     log & eat the exception here only. 
     But inspite of this the outer transaciton gets rolled back 
    } 
} 

문제 아래에 언급 한 바와 같이 나는 2 콩이 것은 그 bean2.bar은 (어떤 예외가 발생하는 경우 예 : foreign Key ConstraintViolationException) "트랜잭션이 롤백 전용으로 표시 되었기 때문에 롤백 된 트랜잭션", "moreInfo": "}}"외부 트랜잭션을 롤백합니다.

최대 절전 모드 로그를 볼 때 단 한 행 '신규 거래'의 경우

새로운 트랜잭션을 의미
D| o.s.o.h.HibernateTransactionManager- Creating new transaction with name ... PROPAGATION_REQUIRED,ISOLATION_DEFAULT; '' 

내가 여기 뭐가 잘못 찾을 수 없습니다 오전 내부 bean2.bar();

을 위해 만들어지고? 어떤 도움이라도 대단히 감사합니다.

답변

1

REQUIRES_NEW는 JTA 트랜잭션 관리자에만 적용됩니다. 봄 문서 here

REQUIRES_NEW
public static final Propagation REQUIRES_NEW

이, 비 트랜잭션 실행 한 가있는 경우 현재 트랜잭션을 중단 참조하십시오. 동일한 이름의 EJB 트랜잭션 속성과 유사합니다.
참고 : 모든 트랜잭션 관리자에서 실제 트랜잭션 일시 중지가 즉시 작동하지 않습니다. 이것은 특히 JtaTransactionManager에 적용됩니다. javax.transaction.TransactionManager를 (표준 J2EE에서 서버 고유)으로 사용할 수 있어야합니다.