Chinaunix首页 | 论坛 | 博客
  • 博客访问: 797741
  • 博文数量: 247
  • 博客积分: 166
  • 博客等级: 入伍新兵
  • 技术积分: 2199
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-15 16:10
文章分类

全部博文(247)

文章存档

2017年(1)

2015年(63)

2014年(80)

2013年(94)

2012年(9)

分类: Java

2014-11-10 16:49:57

转载自http://blog.csdn.net/rick100/archive/2006/02/26/610633.aspx 
典型的数据库jdbc中的事务处理: ACID (原子性、一致性、孤立性和持久性); 
在进行数据库”锁”操作时可以选择不同的事务分离水平: 
1>.READ UNCOMMITTED 效率高,但可能会有脏数据(修改数据时不排他读); 
2>.READ COMMITTED 避免了脏数据(修改数据时排他读); 
3>. REPEATABLE READ 对满足条件的数据行集进行锁定; 
4>.SERIALABLE READ 最高级别,禁止插入; 

两种重要的事务类型:JDBC 事务,JTA 事务 : 
1>.JDBC 事务受数据库的事务管理器控制。在会话 Bean 内包含原有代码时,可能需要使用 JDBC 事务。 要对某个 JDBC 事务进行编码,您调用 java.sql.Connection 接口的提交和回滚方法。事务开头不明确。事务以遵循最近提交、回滚或连接语句的第一个 SQL 语句开头。(此规则通常是准确的,但可能会随数据库供应商的不同而有所变化。) 
2>.JTA 事务允许您在不受事务管理器实施的情况下划分事务。J2EE SDK 利用 JTS 实施事务管理器。但您的代码不直接调用 JTS 方法,而是调用 JTA 方法,JTA 方法然后调用低级 JTS 例程。 

JTA 事务受 J2EE 事务管理器控制。您可能需要使用一个 JTA 事务,因为 JTA 事务可以把更新分发到多个来自不同供应商的数据库。某个数据库的事务管理器可能无法与异类数据库工作。 

两种常用的事务处理模型: FLAT 和NESTED(嵌套式事务),J2EE1.4目前只支持FLAT; Java程序中用于事务处理的API: JTA 在java中,JTA事务处理的编程起源于OMG(COBRA)的OTS(Object Transcation Service)标准,Sun公司对OTS进行java实现:JTS,JTS供系统级程序员使用,而进行组件开发的程序员应该关心的是上层的API:JTA,用的比较频繁的是JTA中的javax.transaction.UserTransaction接口。 

在java中,可以实施3种事务处理控制: 1>.程序Bean控制 2>.容器控制 3>.客户端控制: 
程序Bean控制灵活但比较复杂; 
容器控制是在容器的部署文件中进行定义,比较简单; 
客户端控制的方法用的比较少,也相对复杂些,能保证网络连接出问题时客户端也能得到正确的事务信息。 

在EJB中,Entity Bean只能使用容器控制的事务处理,因为其依赖ejbLoad()->商业方法()->ejbStore()方法完成数据处理; 
在Bean部署文件中声明事务的属性: 
1>.Required 指明该bean必须运行在事务中,没有现成的就新建一个; 2>.RequiresNew 指明每次运行都新建一个事务; 
3>.Supports 指明该bean如目前正处于事务中的话就加入到事务中去,没有就算了; 4>.Mandatory 指明运行该bean时必须有一个事务正在运行让其加入,否则抛出异常; 5>.NotSupported 指明该bean不会运行于任何事务中; 
6>.Never 指明该bean不但不会运行于任何事务中, 而且还会抛出异常。 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rick100/archive/2006/02/26/610633.aspx 

并发问题请参看http://www.blogjava.net/fengzhanke/archive/2010/12/17/341035.html 

hibernate的锁机制 
阅读(821) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~