您的位置:首页 > 编程语言 > Java开发

事务的传播特性及spring声明式事务

2012-10-22 13:42 441 查看
基本的六种事务传播:
1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启

2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行

3. PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

4. PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

5. PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。

6. PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常
Spring配置声明式事务:
* 配置SessionFactory

* 配置事务管理器

* 事务的传播特性

* 那些类那些方法使用事务
2、编写业务逻辑方法

* 继承HibernateDaoSupport类,使用HibernateTemplate来持久化,HibernateTemplate是

   Hibernate Session的轻量级封装

* 默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的

* 编写业务逻辑方法时,最好将异常一直向上抛出,在表示层(struts)处理

* 关于事务边界的设置,通常设置到业务层,不要添加到Dao上
<!-- 配置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="sessionFactory"/>

</bean>

<!-- 事务的传播特性 -->

<tx:advice id="txAdvice" transaction-manager="transactionManager">

    <tx:attributes>

     <tx:method name="add*" propagation="REQUIRED"/>

     <tx:method name="del*" propagation="REQUIRED"/>

     <tx:method name="modify*" propagation="REQUIRED"/>

     <tx:method name="*" propagation="REQUIRED" read-only="true"/>

    </tx:attributes>

</tx:advice>

<!-- 哪些类哪些方法使用事务 -->

<aop:config>

    <aop:pointcut expression="execution(* com.biped.service.*.*(..))" id="transactionPC"/>

    <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPC"/>

</aop:config>

<!-- 普通IOC注入 -->

<bean id="userManager" class="com.biped.service.UserManagerImpl">

    <property name="logManager" ref="logManager"/>

    <property name="sessionFactory" ref="sessionFactory"/>

</bean>

<bean id="logManager" class="com.biped.service.LogManagerImpl">

    <property name="sessionFactory" ref="sessionFactory"/>

</bean>

体验新版博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息