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事务的配置管理