Spring之事物的同步资源管理

现在应该清楚了如何创建不同的事物管理器,和如何链接到关联的资源,其需要与事物同步(例如,DataSourceTransactionManager 对应一个JDBC DataSourc,HibernateTransactionManager 对应一个Hibernate SessionFactory,等等)。这部分讲述了应用程序代码如何直接或者间接地使用一个持续性API,比如JDBC,Hibernate或者JDO,确保资源的创建,重用和合适地清除。同时讲解了通过相关的PlatformTransactionManager触发事物同步。


12.4.1 高级同步方式


更好的方式是使用Spring最高级别的模板,基于持续化集成APIs或者借助事物提醒工厂beans使用本地的ORM APIs或者代理管理本地资源工厂。这些事物提醒方案在内部处理资源创建和重用,清理,可选的资源事物同步,还有异常映射。那么虽然用户数据访问代码不必查找这些任务,但是其仅仅可以专注于非引用的持续化逻辑。一般地,你可以使用本地的ORM API或者使用JdbcTemplate采取一个模板方式访问JDBC。这些解决方案将在后面的章节中讨论。


12.4.2 低级同步方式


类比如JDBC的DataSourceUtils ,JPA的EntityManagerFactoryUtils ,Hibernate的SessionFactoryUtils ,JDO的PersistenceManagerFactoryUtils等等存在一个低级水平。当你想应用程序代码直接处理本地持续性APIs的资源类型时,你使用这些类确保获取合适的Spring框架管理的实例,事物是同步的,并且在处理中发生的异常合理地映射到一个一致性的API中。


例如,在JDBC的例子中,代替调用DataSource的getConnection()方法的传统的JDBC的访问方式,你使用Spring框架提供的org.springframework.jdbc.datasource.DataSourceUtils类:

Connection conn = DataSourceUtils.getConnection(dataSource);


如果一个存在的事物已经有了一个同步的连接,就返回这个实例。否则,方法调用触发新连接的创建,其一般对于任何存在的事物是同步的,并且在那个相同的事物中对于后续的重用可用。如前所述,任何SQLException封装在Spring框架的CannotGetJdbcConnectionException,其是Spring框架的非检查性数据访问异常层级的一个。这个方式使你可以从SQLException中轻易的获取更多信息并且确保了不同数据库之间的可移植性,甚至是在不同的可持续性技术之间。


这种方式也可以在不在Spring事物管理下工作,所以不管是否使用Spring进行事物管理也可以使用这种方式。


当然了,只要你使用了Spring的JDBC,JPA或者Hibernate,你一般地将不喜欢使用DataSourceUtils或者其他的帮助类,因为你将更加喜欢使用Spring抽象而不是直接使用相关APIs。例如,如果你使用Spring的JdbcTemplate或者jdbc.object包指定了你使用的是JDBC,正确的连接检索产生于场景后面并且不需要写任何特别的代码。


12.4.3 TransactionAwareDataSourceProxy


在低级层次中存在TransactionAwareDataSourceProxy 类。这是一个目标DataSource的代理,其封装了目标DataSource来添加Spring管理事物的提醒。在这方面,其与Java EE服务器提供的事务性的JNDI DataSource相似。


几乎从不推荐使用这个类,除了当存在的代码必须被调用和传递一个标准的JDBC DataSource接口实现。在那个例子中,这个代码很可能是不可用的,但是了在Spring管理的事物中可由多方参与。更加推荐使用高级层次抽象写你新的代码。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值