Spring MVC 3.1 프로젝트에서 주석 기반 트랜잭션을 사용하고 있으며 예외가 발생하면 트랜잭션이 롤백되지 않습니다.스프링 트랜잭션이 예외 (Oracle JNDI 데이터 소스)에서 롤백되지 않습니다.
은 여기에 예외가 발생 후 그래서, 희망의 createImport 방법은 롤백해야 내 서비스 코드
@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);
}
}
입니다. 그러나 불행히도 그것은 아닙니다.
내가 서버의 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은 자동 커밋이 기본적으로 true라고 말합니다. 나는 그것을 틀리게 명시 적으로 설정하면 도움이 될 것이라고 생각했지만, 어떻게해야 하는지를 알 수 없다.
JNDI를 통해 Oracle 데이터 소스를 조회하는 동안 롤백을 작동시키는 방법이 있습니까?
문제는 해결되었지만 원래 생각했던 문제는 아닙니다. 트랜잭션 Bean이 잘못된 컨텍스트 파일에 정의되었습니다. 나는 그들이 루트 컨텍스트에서 그들을했다. 이 질문은 내 문제를 해결하는 데 도움이 : http://stackoverflow.com/questions/10538345/spring-transactional-annotations-ignored –
이 질문은 실제 문제는 텍스트에서 설명하는 문제는 아니므로 주제 이외의 것으로 보입니다. . – APC