转载自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的锁机制
阅读(845) | 评论(0) | 转发(0) |