一、在Spring的配置文件applicationContext.xml中配置事务管理器对象transactionManager:
<!-- 使用注解方式定义事务 -->
<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
....
二、在Action类中注入transactionManager,便于引入事务控制:
/**
* spring提供的事务支持
*/
private TransactionTemplate transactionTemplate;
@Resource(name="transactionManager")
public void setTransactionTemplate(PlatformTransactionManager transactionManager) {
this.transactionTemplate = new TransactionTemplate(transactionManager);
}
这里可以把其放入BaseAction中,便于继承于他的子类直接使用,将访问修饰符改为protected:
/**
* spring提供的事务支持
*/
protected TransactionTemplate transactionTemplate;
@Resource(name="transactionManager")
public void setTransactionTemplate(PlatformTransactionManager transactionManager) {
this.transactionTemplate = new TransactionTemplate(transactionManager);
}
三、在Action的一些方法中使用Spring提供的事务支持
this.transactionTemplate.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus transactionstatus) {
try{
productService.saveEntity(product); // 保存商品
...
...
... prostandvalueService.save(pdv); // 保存商品规格的值
}catch(Exception e){
if(log.isErrorEnabled()){
log.error("商品保存出错!"+e.toString());
}
// 事务回退
transactionstatus.setRollbackOnly();
addActionError("保存失败!<br/>"+e.getMessage());
return ERROR;
}
return null;
}
});