SSH整合时的事务管理
2009-10-24 16:39
232 查看
困惑了几天的事务管理终于搞定了,写出来一起分享,也加深记忆。
一、在applicationContext-common.xml中配置如下信息:
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!-- 声明事务拦截器 -->
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"></property>
<property name="transactionAttributes">
<props> <!-- 配置事务的传播特性-->
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="modify*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!-- 声明代理创建者 -->
<bean id="ProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>userDAOImpl</value> <!-- 指定需要加入事务管理的对象 -->
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
二、非常重要的一点:在你的action中使用业务逻辑处理时,比如在登录处理时,必须将事务管理的对象的类型设置为它的接口类型,
否者会报类型不匹配的错误(因为spring默认使用JDK代理类来实现代理,而JDK代理必须要有接口):
public class LoginAction extends Action{
private IUserDAO userDAOImpl;
public void setUserDAOImpl(IUserDAO userDAOImpl) {
this.userDAOImpl = userDAOImpl;
}
............
}
注意IUserDAO,很容易将它写成UserDAOImpl,而以为自己有接口却报错
当然,你也可以强制使用cglib方式。
一、在applicationContext-common.xml中配置如下信息:
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!-- 声明事务拦截器 -->
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"></property>
<property name="transactionAttributes">
<props> <!-- 配置事务的传播特性-->
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="modify*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!-- 声明代理创建者 -->
<bean id="ProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>userDAOImpl</value> <!-- 指定需要加入事务管理的对象 -->
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
二、非常重要的一点:在你的action中使用业务逻辑处理时,比如在登录处理时,必须将事务管理的对象的类型设置为它的接口类型,
否者会报类型不匹配的错误(因为spring默认使用JDK代理类来实现代理,而JDK代理必须要有接口):
public class LoginAction extends Action{
private IUserDAO userDAOImpl;
public void setUserDAOImpl(IUserDAO userDAOImpl) {
this.userDAOImpl = userDAOImpl;
}
............
}
注意IUserDAO,很容易将它写成UserDAOImpl,而以为自己有接口却报错
当然,你也可以强制使用cglib方式。
相关文章推荐
- SSH整合时,基于注解的事务管理的配置方式
- SSH整合,spring事务管理不回滚问题
- Spring整合Hibernate--声明式事务管理
- 项目管理--maven浅析《二》之管理SSH项目整合开发
- spring hibernate整合时配置文件的事务部分(spring管理事务)
- Spring整合JDBC以及AOP管理事务
- 【SSH】:基于Struts2+HIbernate3+Spring3实现员工管理系统之框架整合篇
- 85-002-3 spring与hibernate的整合(采用AOP来管理事务实现声明式事务)
- Spring整合Mybatis(二)------增加事务管理(编程的方式)
- 使用配置方式进行ssh的整合以及管理员管理的案例
- ssh整合系列博客——(3)在jsp中如何使用spring管理的bean
- 基于SSH实现员工管理系统之框架整合篇
- Spring整合JMS(四)——事务管理
- mybatis与spring整合事务管理
- Spring整合hibernate4:事务管理
- Spring声明式事务管理、Spring整合Hibernate
- Spring 与 mybatis整合---事务管理
- spring整合 mybatis 事务管理不生效原因
- spring整合 mybatis 事务管理不生效原因
- 【SSH】Spring学习(三)Spring整合JDBC、Spring中AOP事务