2014-02-26 7 views
0

기존 트랜잭션에 리소스/상태를 추가/가져 오는 방법을 찾으려고합니다. Spring에서도 가능합니까? 그러나Spring : 트랜잭션 특정 리소스 추가

org.springframework.transaction.support.TransactionSynchronizationManager#getResouce(Object) 
org.springframework.transaction.support.TransactionSynchronizationManager#bindResource(Object, Object) 

, 이것은 트랜잭션의 현재 스레드에 리소스를 추가 내가 비슷한 무언가를 발견

@Service 
@Transactional("txManager") 
public class ServiceImpl implements Service { 

    @Override 
    @AddResourceHere 
    public TestObj doSomething(){ 
     ... 
    } 

    @Override 
    @AddResourceHere 
    public TestObj doSomethingAgain(){ 
     ... 
    } 
} 

@Aspect 
@Component 
public class Interceptor { 

    private static final Logger logger = LogManager.get(Interceptor.class); 

    @Before("@annotation(my.package.AddResourceHere)") 
    public void switchDatabase(JoinPoint joinPoint){ 
     MyResource resource = TransactionResouceAdder.getResource("transactionSpecificResource"); 
     if(resource == null){ 
      TransactionResouceAdder.addResource(new MyResource("A new resource")); 
      ... 
     } 

     else 
      log.info("resource has already been added for this transaction"); 
    } 
} 

public class Test { 
    ... 
    @Test 
    @Transactional("txManager") 
    public void doSomethingTest(){ 
     serviceImpl.doSomething(); 
     serviceImpl.doSomethingAgain(); 
    } 
} 

:

는 내가 달성하기 위해 노력하고있어 아래 의사 코드와 유사하다 . 리소스 트랜잭션을 한정적으로 만 할 수있는 방법이 있습니까?

실제 코드에서는 spring jdbc의 DataSourceTransactionManager를 트랜잭션 관리자로 사용하고 있습니다. 어떤 도움 :)

답변

0

TransactionSynchronizationManager에 미리

감사는이 목적을 위해 설계되었으며 리소스는 트랜잭션의 끝 (AbstractPlatformTrasactionManager 참조)에서 삭제됩니다. 애스펙트가있는 커스텀 애노테이션에 연결해야하지만, 어떻게 해야할지 이미 알고있는 것처럼 보입니다.

+0

정보 주셔서 감사합니다! 사실, 소스 코드를 조사한 결과, TransactionSynchronizationManager를 사용하는 방식이 불완전하다는 것을 알게되었습니다. 내가 놓친 중요한 단계는 현재 활성 트랜잭션에 대한 자원의 동기화입니다. ** org.springframework.transaction.support.ResourceHolder ** ** org.springframework.transaction.support.ResourceHolderSupport ** ** org.springframework.transaction.support.ResourceHolderSynchronization :이 단계는 다음을 사용하여/확장 포함 ** – jespeno