0

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()がロールバックされないことです。

助けていただければ幸いです。ありがとう。

4

1 に答える 1

-1

注釈を使用することをお勧めします (簡単です)。

「Spring 2.0 以降のバージョンの宣言型トランザクション構成は、Spring の以前のバージョンとはかなり異なります。主な違いは、TransactionProxyFactoryBean Bean を構成する必要がなくなったことです。」

サービス A がサービス B を呼び出しているように、@Transactional Propagation.REQUIRED で注釈を付けます。例外があると、トランザクションがロールバックされます。(捕まえて処理しないと)

于 2012-11-06T08:17:38.453 に答える