メソッドa、b、cを含む@Transactional
とマークされたいくつかのメソッドがあります。これらの3つのメソッドは、a - > b - > cのように入れ子になっています。SQL Server 2012のSpring @TransactionalとPROPAGATION_REQUIRES_NEW
@Transactional
public void a() {
while(condition) {
try {
b();
} catch(MyException e) {
logger.warn(e.getMessage());
}
}
}
方法bは、しかし、このように注釈されている:ここでのサンプルコードでMyException
は方法cからスローされたときにそれが終了したときに
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {MyException.class})
ただし、例外がメソッドaでキャッチしているが、トランザクションはコミットされ、例外をスローしたb()の呼び出しによって何が行われたのか、ロールバックされたはずです(?)。私は、SQL Server 2012を使用しています は春3.0.7で表現し、私の春の構成は、このようなものです:思えるb
<tx:annotation-driven />
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<qualifier value="txm1"/>
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="dataSource" ref="dataSource"/>
<property name="persistenceXmlLocation" value="classpath:META-INF/jpa-persistence.xml"/>
<property name="persistenceUnitName" value="Unit1" />
</bean>