【发布时间】:2013-06-13 22:25:16
【问题描述】:
我在 Spring MVC 3.1 项目中使用基于注释的事务,并且在引发异常时我的事务不会回滚。
这是我的服务代码
@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 规范说默认情况下自动提交是真的。我认为如果我将其明确设置为 false 会有所帮助,但我不知道该怎么做。
在通过 JNDI 查找 Oracle 数据源时,有什么方法可以让回滚工作。
【问题讨论】:
-
我解决了我的问题,但问题不是我最初想的那样。事务 bean 在错误的上下文文件中定义。我将它们放在根上下文中。这个问题帮助我解决了我的问题:stackoverflow.com/questions/10538345/…
-
这个问题似乎跑题了,因为实际问题不是文中描述的问题。
标签: oracle spring-mvc jndi