ServiceA と ServiceB の 2 つのクラスがあり、どちらもデータベースを呼び出すメソッドを持っています。
ServiceAには次のコードがあります
public void updateData() {
//some database updates
serviceB.addDetails();
//some more database updates
}
ここに、両方のクラスのapplicationContextでの私の構成があります
<bean id="serviceATarget" class="com.company.service.ServiceA">
<property name="serviceB" ref="serviceB" />
<property name="serviceADAO" ref="serviceADAO" />
</bean>
<bean id="serviceA" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="target" ref="serviceATarget" />
<property name="transactionAttributes">
<props>
<prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
<bean id="serviceBTarget" class="com.company.service.serviceB">
<property name="serviceBDAO" ref="serviceBDAO" />
</bean>
<bean id="serviceB" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="target" ref="serviceBTarget" />
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
問題は、ServiceA では、"//some more database updates" セクションの後に例外が発生した場合、で行われた更新serviceB.addDetails()
がロールバックされないことです。
助けていただければ幸いです。ありがとう。