posts - 40,  comments - 4,  trackbacks - 0
事务管理的方式:编程式和声明式,spring推荐使用后一种方式。

 事务管理的原理:Aop为普通java类封装事务控制,它是通过动态代理实现的,spring在这段时间内通过拦截器,加载事务切片。由于Aop的原理是动态加载(回去研究一下proxy动态加载)来进行事务控制的。

事务管理的步骤(以hibernate为例):

1.定义一个hibernate适用的事务管理器,将SessionFactory注入进去:

<bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
      <property name="sessionFactory">
         <ref bean="sessionFactory"/>
      </property>
</bean>
2.定义事务管理的策略:
<bean id="transactionAttributeSource" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
      <property name="properties">
         <props>
            <prop key="add">
               PROPAGATION_REQUIRES_NEW
            </prop>
         </props>
      </property>
   </bean>
还可以定义事务隔离程度和回滚
3.定义一个事务管理器(动态加载来实现的)
<bean id="studentManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
      <property name="target">
         <ref bean="studentManager"/>
      </property>
      <property name="transactionManager">
         <ref bean="transactionManager"/>
      </property>
      <property name="transactionAttributeSource">
         <ref bean="transactionAttributeSource"/>
      </property>
</bean>

这个bean的外观是一个接口(StudentManagerInterface),我们指出了它的具体实现(studentManager),而且为它绑定了事务策略
附A pring中的所有事务策略

  • PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
  • PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
  • PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
  • PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
  • PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  • PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。


  • 附B Spring中所有的隔离策略:

    ISOLATION_DEFAULT
    ISOLATION_READ_UNCOMMITED
    ISOLATION_COMMITED
    ISOLATION_REPEATABLE_READ
    ISOLATION_SERIALIZABLE
    AOP应用范围

    Authentication 权限
    Caching 缓存
    Context passing 内容传递
    Error handling 错误处理
    Lazy loading 懒加载
    Debugging  调试
    logging, tracing, profiling and monitoring 记录跟踪 优化 校准
    Performance optimization 性能优化
    Persistence  持久化
    Resource pooling 资源池
    Synchronization 同步
    Transactions 事务

    典型的hibenrnate事务管理


    <!-- Hibernate SessionFactory -->
    <bean id="sessionFactory“   class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
                    <property name="dataSource"><ref local="dataSource" /></property>
                    <property name="mappingResources">
                            <list><!-- Add list of .hbm.xml files here -->
                                    <value>org/mzone/model/Tuser.hbm.xml</value>
                                    <value>org/mzone/model/Article.hbm.xml</value>
                            </list>
                    </property>
                    <property name="hibernateProperties">
                            <props>
                                    <prop         key="hibernate.dialect">net.sf.hibernate.dialect.SybaseDialec</prop>
                                    <prop key="hibernate.show_sql">True</prop>
                            </props>
                    </property>
            </bean>

    <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
            <bean id="transactionManager"
                    class="org.springframework.orm.hibernate.HibernateTransactionManager">
                    <property name="sessionFactory"><ref local="sessionFactory" /></property>
            </bean>        
            <bean id="baseTxProxy" lazy-init="true"         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager"><ref bean="transactionManager"/></property>
               <property name="target">
                       <ref local=" userManagerTarget " />
                </property>
            <property name="transactionAttributes">
                <props>
                                <prop key="save*">PROPAGATION_REQUIRED</prop>
                            <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                            <prop key="remove*">PROPAGATION_REQUIRED</prop>
                            <prop key="*">PROPAGATION_REQUIRED</prop>
                </props>
            </property>
        </bean>
        <bean id="userManagerTarget" class="org.mzone.service.impl.UserManagerImpl">
            <property name="userDAO"><ref local="userDAO"/></property>
            <property name="articleDao"><ref local="articleDAO"/></property>
        </bean>
    userDAO和articleDao是接口
    posted on 2006-11-19 20:16 larryjava 阅读(145) 评论(0)  编辑  收藏

    只有注册用户登录后才能发表评论。


    网站导航: