2009-10-05 6 views
1

저는 각 서비스가 4 개의 개별 데이터 소스를 참조하는 프로젝트를 진행하고 있습니다. 지금까지 우리는 다오 대상 및 트랜잭션 Intereceptor를 참조하기위한 ProxyFactoryBean 사용하고있다 - 이런 일을 ...여러 데이터 소스로 세션을 관리하는 데 문제가 있습니다.

<bean id="readOnlyUserProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> 
    <property name="target" ref="readOnlyDao"/> 
    <property name="interceptorNames"> 
     <list> 
     <value>readOnlyTransactionInterceptor</value> 
     </list> 
    </property> 
</bean> 

다른 DAO를위한 3 다른 유사한 프록시가 있습니다. 이 모든 것은 서로 다른 트랜잭션 인터셉터를 말하며 서로 다른 트랜잭션 관리자에 연결됩니다. 간단히 말해 각 서비스는 각각 4 개의 다른 데이터 소스에 연결하는 별도의 트랜잭션 관리자를 나타내는 별도의 트랜잭션 인터셉터를 나타내는 4 개의 DAO 프록시에 연결됩니다. 모든 작업은 lazy = "false"로 지금까지 작동합니다.

이제 성능을 최적화하기 위해 '지연 로딩'을 활성화하고 최대 절전 모드 세션을 처리기 계층에 전달하려고합니다. 우리는 OpenSessionInView 접근법을 사용하지 않기 때문에 'TransactionProxyFactoryBean'을 사용하는 것이 가장 좋은 방법이라고 생각합니다.

우리는 몇 가지 접근법을 시도했지만 각 서비스를 통해 4 개의 개별 데이터 소스에 연결하고 이제는 4 개의 개별 트랜잭션 관리자를 'TransactionProxyFactoryBean'에 연결할 수 있으므로 막혔습니다. 따라서 처리기/서비스 계층의 다른 데이터 소스에서 트랜잭션을 관리하는 방법을 찾을 수 없습니다.

방금이 작업을 시작했고 Spring 트랜잭션 관리에 대한 많은 경험이 없습니다. 가능한 모든 접근법에 대해 친절하게 안내하겠습니다.

답변

0

여러 데이터 소스에서 트랜잭션을 관리하는 것은 응용 프로그램 서버의 작업입니다. appserver는 JTA API를 통해 트랜잭션을 노출시키고 Spring은 JtaTransactionManager를 사용하여 JPA API에서 Spring API로 연결할 수 있습니다.

응용 프로그램 서버 자체를 구성하는 방법은 응용 프로그램 서버에 따라 다르므로 해당 응용 프로그램 서버에 대해 조사해야합니다. 데이터 소스가 여러 데이터베이스 서버에 분산되어있는 경우 (특히 XA 트랜잭션 모니터가 필요하고 모든 작업이 매우 복잡해집니다) 매우 복잡한 작업이 될 수 있습니다.

관련 문제