2014-12-10 2 views
0

저는 Spring 4.1.2를 사용합니다. DirtiesContext가있는 Junit 4 및 SpringJUnit4ClassRunner.Spring & dirtiescontext & AnnotationTransactionAspect

스프링이 오래된 컨텍스트를 파괴하고 새로운 컨텍스트를 생성 한 후에 나는 모든 콩이 새로운 것을 볼 수 있습니다. 하지만 동일한 AnnotationTransactionAspect 클래스에 의해 프록시 처리됩니다. 흥미로운 점은 AnnotationTransactionAspect-s (TransactionAspectSupport)에 새 beanFactory가 있다는 점입니다. 하지만 동시에 이전 테스트의 이전 연결을 캐시하는 오래된 transactionManagerCache-s가 있습니다 (그리고 이러한 연결은 첫 번째 테스트가 끝날 때 종료됩니다).
스프링이 새로운 AnnotationTransactionAspects를 생성하지 않는 이유는 무엇입니까?

P. 봄 3.X에서 4.X로 마이그레이션 한 후 문제가 발생하기 시작한 것 같습니다.

+0

디버그 정보 : AnnotationTransactionAspect 생성자는 첫 번째 테스트 전에 한 번만 호출됩니다. –

답변

0

AnnotationTransactionCreation을 수정하는 방법을 얻지 못했습니다. 나는 해킹했다. PlatformTransactionManager를

public class TestTransactionManager implements PlatformTransactionManager { 
private static List<TestTransactionManager> transactionManagerList = new ArrayList<>(); 

private PlatformTransactionManager transactionManager; 

public void init() { 
    transactionManagerList.add(this); 
    for (TestTransactionManager m : transactionManagerList) { 
     m.setTransactionManager(transactionManager); 
    } 
} 

public void setTransactionManager(PlatformTransactionManager transactionManager) { 
    this.transactionManager = transactionManager; 
} 

@Override 
public TransactionStatus getTransaction(TransactionDefinition transactionDefinition) throws TransactionException { 
    return transactionManager.getTransaction(transactionDefinition); 
} 

@Override 
public void commit(TransactionStatus transactionStatus) throws TransactionException { 
    transactionManager.commit(transactionStatus); 
} 

@Override 
public void rollback(TransactionStatus transactionStatus) throws TransactionException { 
    transactionManager.rollback(transactionStatus); 
} 

}

에 프록시를 만들고 봄의 버그했다 테스트 응용 프로그램 컨텍스트

<bean id="testTransactionManager" class="ru.bpc.core.integration.stub.TestTransactionManager" init-method="init"> 
    <property name="transactionManager" ref="transactionManager"/> 
</bean> 
<tx:annotation-driven mode="aspectj" transaction-manager="testTransactionManager"/> 
관련 문제