码迷,mamicode.com
首页 > 其他好文 > 详细

事务与并发控制

时间:2014-10-09 20:23:38      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:io   使用   java   for   数据   sp   on   cti   工作   

 1、定义事务
 
  可以引用数据库的物理事务
  可以引用和一个持久上下文相关的逻辑事务
  可以引用应用程序的工作单元,当做由原型模式定义
  
 2、物理事务
  
  Hibernate使用JDBC API的持久性,在java中有两个定义良好的机制处理事务的JDBC:JDBC和JTA。
  Hibernate支持结合事务机制,允许应用程序来管理物理事务。
  
  org.hibernate.engine.transaction.spi.TransactionFactory中2个主要的功能:
   它允许hibernate理解环境的事务语义,是否JTA?是否当前活动的物理事务?等等
   作为一个为org.hibernate.Transaction实例工厂。用来允许应用程序管理和检查事务的状态,
    org.hibernate.Transaction是hibernate逻辑事务概念。JPA中javax.persistence.EntityTransaction接口也类似
  
  物理事务-JDBC
   基于JDBC事务管理利用java.sql.Connection.commit()和java.sql.Connection.rollback(),
   JDBC没有定义一个显式的方法开始一个事务。
   在hibernate中,该方法由org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory类表现
   
  物理事务-JTA 
   基于JTA事务方法是从org.hibernate.service.jta.platform.spi.JtaPlatform API获得javax.transaction.UserTransaction接口
   由org.hibernate.engine.transaction.internal.jta.JtaTransactionFactory类表现
  
  物理事务-CMT
   另一种基于JTA事务方法是从org.hibernate.service.jta.platform.spi.JtaPlatform API获得javax.transaction.TransactionManager接口
   由org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory类表现
   在真实的JEE CMT环境中,访问javax.transaction.UserTransaction是限制的
  
  物理事务-Custom
   可以实现org.hibernate.engine.transaction.spi.TransactionFactory来插入自定义的事务方式。
   默认服务启动有内置支持由hibernate.transaction.factory_class指定名称的自定义事务:
    使用org.hibernate.engine.transaction.spi.TransactionFactory实例
    使用实现org.hibernate.engine.transaction.spi.TransactionFactory类的名字,实现类提供无参构造器
  
  物理事务-Legacy
   在开发4.0过程中,此部分大多数类名被移动到新的包中,帮助促进升级,Hibernate也遗留名字一段时间
   org.hibernate.transaction.JDBCTransactionFactory  org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory
   org.hibernate.transaction.JTATransactionFactory  org.hibernate.engine.transaction.internal.jta.JtaTransactionFactory
   org.hibernate.transaction.CMTTransactionFactory  org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
   
 3、hibernate事务的使用
  Hibernate使用直接JDBC连接和JTA资源,在不增加任何额外的锁定行为。
  对你熟悉JDBC,ANSI SQL,事务隔离细节你的数据库管理系统很重要
  Hibernate不会在内存中锁定对象,当你使用Hibernate时,由你数据库事务隔离级别定义的行为不会改变。
  org.hibernate.Session当做一个事务作用范围缓存提供通过标识符可重复读和加载实体的结果集
  
  为了减少数据库中锁挣用,物理数据库的事务必需尽可能的短。长数据库事务阻止你的应用扩展到高并发负载,
  不持有一个数据库的事务在打开最终用户级别的工作期间,但在最终用户级别的工作完成后打开它。称为:事务的write-behind
  
 4、事务的模式(反模式)
  Session-per-operation 反模式
   在单线程中为每个数据库的调用打开和关闭一个Session的反模式,它也是一种反模式的数据库事务。
   把你的数据库调用分组到一个计划序列。同样的,应用中每一个sql语句之后不自动提交。
   Hibernate禁用,或者应用服务器禁用自动提交模式。
   数据库的事务从来都不是可选的,所有使用数据库的通讯必需通过一个事务进行封装。
   避免读取数据时自动提交,因为许多小事务不太可能比一个定义良好的工作单元执行更好,并且难以维护和扩展。

事务与并发控制

标签:io   使用   java   for   数据   sp   on   cti   工作   

原文地址:http://my.oschina.net/rksi5/blog/325461

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!