Spring MVC 3.1プロジェクトで注釈ベースのトランザクションを使用していて、例外がスローされたときにトランザクションがロールバックされません。ここでSpringトランザクションが例外でロールバックしない(Oracle JNDIデータソース)
は、だから私のサービスコード
@Service
public class ImportService {
@Autowired
ImportMapper importMapper;
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED, rollbackFor=Throwable.class)
public void processImport() throws ServiceException, DatabaseException {
iImport import = new Import();
createImport(import);
throw new ServiceException("");
}
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED, rollbackFor=Throwable.class)
private void createImport(Import import) throws DatabaseException {
try {
importMapper.createImport(eventImport);
} catch (Exception e) {
throw new DatabaseException(e);
}
}
で例外がスローされた後、うまくいけば、createImport方法はロールバックされなければなりません。しかし、残念ながらそうではありません。
私は、サーバーのcontext.xml
<Resource name="datasource.import" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="user" password="password" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@INFO" />
で私のデータソースを定義していると私は、JNDIでそれを探しています:
<jee:jndi-lookup id="dataSource" jndi-name="datasource.import"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven />
私はOracleデータベースを使用して、JDBCよspecはデフォルトでauto commitが真であると言います。明示的に偽に設定すると助けになると思っていましたが、それをどうやって行うのか分かりません。
OracleデータソースをJNDIでルックアップする際に、ロールバックが機能する方法はありますか。
私は私の問題を解決しましたが、問題は当初考えていたものではありませんでした。トランザクションBeanは、間違ったコンテキストファイルで定義されていました。私はそれらを根本的な文脈で持っていた。 この問題は、私の問題を解決するのに役立ちました:http://stackoverflow.com/questions/10538345/spring-transactional-annotations-ignored –
この質問は、実際の問題は本文に記載されていないので、 。 – APC