저는 선언적 트랜잭션 관리 기능이있는 Spring + Hibernate 어플리케이션을 보유하고 있습니다. 2 개의 공개 메소드 MethodA
및 MethodB
을 가진 서비스 (FooService
)가 있습니다. 클라이언트는 call
MethodA
을 차례로 호출하여 MethodB
을 호출합니다.Spring에서의 선언적 트랜잭션 관리는 예측할 수 없게 동작합니다.
Client -> MethodA -> MethodB
트랜잭션을 MethodB부터 시작하고자합니다. 이 내 스프링 애플리케이션 컨텍스트에서 코드 조각입니다 : 내 클라이언트에서 MethodA
를 호출 할 때 MethodB
호출 할 때
<bean id="FooService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="target" ref="FooServiceTarget" />
<property name="transactionAttributes">
<props>
<prop key="MethodB">PROPAGATION_REQUIRED,-FooException</prop>
</props>
</property>
</bean>
는 그러나, 트랜잭션 프록시를 만들지 않습니다. 응용 프로그램 컨텍스트의 빈 구성에 MethodA
도을 추가하면 트랜잭션 프록시가 호출됩니다 (예상대로 MethodA
으로 시작). 왜 이렇게됩니까? MethodB 이후에서만 생성되는 트랜잭션을 얻을 수 있습니까?
답변 해 주셔서 감사합니다.죄송합니다. 나는이 질문들이 이미 SO에 관한 질문을 받았음을 알지 못했습니다. –