您的位置:首页 > 其它

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方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: