标签: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