J2EE 应用的事务有两种:

           全局事务和局部事务;全局事务由应用服务器管理,需要底层服务器JTA支持,局部事务,则采用jdbc技术,connection连接来操作事务,hibernate 事务,则是用session来操作事务。

       Spring 事务策略核心是PlatformTrationActionManager这个接口,该接口下面包含三个为实现的抽象方法:

getTransaction,commit,rollback.

      spring 事务管理机制是典型的策略模式,它只提供接口,但是并不关心底层是怎样管理事务,开始事务,提交事务,回滚事务。

       JTA 全局事务:

            配置JNDI数据源Bean

<bean id="dataSource" class="JNDIObjectFactoryBean"/>
               <property name="jndiName" value="jdbc/jpetstore"/>
         < /bean>

      JDBC局部事务:

        配置JDBC数据源的局部事务管理器,使用的是DataSourceTranceactionManager

<bean id="transactionManager"  class="org.DataSourceTranceactionManager">
        <property name="dataSource" ref="dataSource"/>
      </bean>

     hibernate局部事务:

             配置sessionFactory bean 并且注入dataSource 以及列出所有的PO映射文件以及配置hibernate的方言和hibernate创建映射数据表

            采用全局事务进行管理

           

     

     

声明事务:


  1.声明式事务能大大的降低开发者的代码书写量,而且声明式事务几乎不影响应用的代码,因此无论底层事务策略如何变化,应用程序无需改变;


   


  2.应用程序代码无须任何事务处理代码,可以更专注业务逻辑层


   


  3.Spring 则可对任何pojo的方法提供事务管理,而且Spring的声明式事务管理,无须容器的支持。


  


  4.Spring 采用Aop的方式管理事务,因此,可以在事务回滚动作中插入用户自己的动作,而不仅仅是执行系统默认的回滚


声明式事务使用的是TransactionProxyFactory来配置事务代理Bean




 如何配置:


  1.首先配置一个DataSourceTransactionManager JDBC局部事务管理器 并注入dataSource


  2.配置一个业务逻辑Bean 并且注入dataSource


  


  3.创建一个指定的事务管理器


<tx:advice id="txAdvice" transaaction-manager="transaactionManager"> 

        <tx:attributes> 

              //以get为开头的bean 

              <tx:method name="get.*" read-obly="true"/> 

               <tx:method name="*"/> 

        </tx:attributes> 

     </tx:advice>


  4.配置Aop的元素


 

<aop:config> 

           //配置切点 

           <aop:poincut id="myPoint" expression="execution(* org.crazyit.app.dao.impl.)" 

           <aop:advisor advice-ref="txAdvice" pointcut-ref="myPoint"/>  //切面引入该切点 

   </aop:config>

advice ---》transaactionManager---》attrubute--->method

method:

    事务传播行为;

    事务隔离级别;

    超时:

    异常回滚:

   没有异常回滚:

采用注解的方式 <tx:annotation-driven transaction-manager="transactionManager"/>来进行spring事务的配置管理