一、事务的基本知识
1、什么是事务?
通常,我们把一组连续不可分的数据库操作称为一个事务。
事务解决了两大问题,原子操作,数据共享
原子操作,是由不可分操作组成的,使这些不可分的操作,一同操作成功或者一同失败。
2、事务的ACID特性
A(Atomicity)原子性:操作不可分割,一连串操作当作一个整体执行;
C(Consistency)一致性:数据库的数据在事务完成前后保持一致;
I(insulation)隔离性:多个事务独立地执行,一个事务的执行不影响另一个事务的执行结果,隔离性即一个事务对另一个事务的可见性;
D(durability)持久性:事务操作的结果应该保留下来。
3、事务的类型
(1) 扁平式事务:事务要么成功,要么失败,不允许包含子事务;
(2) 嵌套式事务:一个大事务里潜逃多个小事务,允许子事务回滚。各个子事务必须都成功,整个事务才能成功提交;
Tips:EJB不支持嵌套式事务。
4、分布式事务(Distributed Transaction)
(1) 什么是分布式事务?
跨越多个数据资源的事务叫做分布式事务。
数据资源:对数据进行存储、管理的空间(如Database,JMS中的主题队列,File System,后端系统等)。
JDBC只支持本地事务。
本地事务:只负责处理单个数据资源(Data Resource)的事务。
(2) 为什么要使用分布式事务?
企业级应用中,业务需要跨越多个数据资源,并且要作为一个整体来执行,就需要使用分布式事务。
(3) 分布式事务的原理
两阶段提交协议(Two-phrase commit protocol)
① 四个角色:A、Data Resource(数据存取的目的地,通常为Database)
B、Resource Manager(负责数据资源管理,通常为Database device)
C、Transaction Manager(负责对资源管理器施加事务的管理)
D、Transaction Coordinator(事务协调器,负责对多个事务管理器进行协调,保证分布式事务能够执行)
②Two-phrase commit protocol执行过程(类似于投票机制中的一票否决制)
第一阶段:事务准备阶段
a、事务协调器(Transaction Coordinator)向各个事务管理器(Transaction Manager)发送事务准备提交的信息;
b、Transaction Manager向Transaction Coordinator回应是否提交事务;
c、Transaction Coordinator记录日志(各个Transaction Manager的回应);
第二阶段:事务提交阶段
d、Transaction Coordinator向各个Transaction Manager发送事务提交信息;
e、Transaction Manager将执行结果返回给Transaction Coordinator。
二、EJB中的事务机制
1、JTS(Java Transaction Service)
JTS协议基于OTS协议,JTS协议即Java中分布式事务服务的协议。
JTA(Java Transaction API):
① UserTransaction(EJB或其他组件用该接口使用分布式事务)
② TrasactionManager:应用服务器与分布式事务服务器的接口
③ ResourceManager
EJB事务调用流程:EJB→UserTransaction→JTA→JTS→OTS
2、EJB的事务
① EJB事务的特点
提供声明式事务与编程式事务
声明式事务:应用程序只需要关心业务逻辑,由容器来负责事务的管理。
编程时事务:应用程序编码人员自己写事务代码。
② EJB事务编程的类型
A、CMT 容器管理事务
B、BMT Bean管理事务
C、Client-MT Client-Controlled Transaction客户端管理事务
实体Bean只能用CMT。
CMT:
由容器实现的远程对象/拦截器,负责调用中间件服务。
优点:在应用程序代码中,不用编写事务服务代码;
缺点:粗粒度,只能在方法级别控制事务。
EJB Bean类中编程方式来使用事务(BMT):
优点:细粒度地控制事务
缺点:事务代理与业务代码纠缠
Client-controlled Transaction:
优点:客户端可以精确控制事务
缺点:可能会因为网络问题引起是事务的回滚。
3、EJB事务边界的划分
事务边界:事务边界是指事务从哪里开始。
CMT的事务特性:
Required:Bean类的方法必须要在事务环境下运行,这是容器默认的事务机制。
事务特性只能使用在CMT。
RequiredNew:Bean类中的方法必须在一个新的事务环境下运行。
Supports:Bean类的方法不需要支持事务。如果客户端有事务,则继续沿用原事务环境。
Mandatory:Bean类中方法必须要在事务环境下运行。客户端不启动事务则报错。
NoSupported:Bean类中方法不支持事务。如果客户端启动了事务,则挂起该事务。
Never:Bean类中的方法不支持事务。如果客户端启动了事务,则报错。
三、EJB事务的编程
1、CMT
@TransationManagement 用在类前,标注该EJB事务管理方式为Bean | Container(默认)
@TrasactionAttribute 用在方法前,标注事务特性(事务的边界)
@SessionContext.setRollbackOnly() 回滚标识,setRollbackOnly()方法必须在事务环境下运行。
EJB容器对于非受查异常(主要指RuntimeException)会回滚,事务对于受查异常则会提交事务。
2、BMT
UserTransaction:
① interface
② 提供控制事务的方法
③ 由容器实现,可以使用@Resource注入
UserTransaction.begin()| commit()| .rollback()
3、客户端控制事务
调用EJB的方法,要求EJB必须采用CMT形式。
4、事务的隔离性
事务的隔离级别:
A、Read uncommitted:性能最高
B、Read committed:解决脏读问题
C、Repeatable read:解决重复读取问题
D、Serializable:解决幻读问题
EJB本身不提供隔离级别的设置,可以通过直接设置数据库(连接池)的隔离级别。
SessionSynchronization接口:
在有状态会话Bean中,如果事务失败,可以恢复其状态。
afterbegin():在事务刚启动是,容器调用该方法,一般做状态初始值的保存。
beforeCompletion():在事务完成之前,容器回调。
afterCompletion():在事务提交之后调用,boolean值由容器提供。true表示事务提交成功,false则表示事务失败。在此方法中,做状态的恢复。
分享到:
相关推荐
在深入探讨《ejb学习笔记》这一主题之前,我们首先需要理解什么是EJB(Enterprise JavaBeans)。EJB是Java平台为企业级应用开发提供的一套组件模型,它属于J2EE(Java 2 Platform, Enterprise Edition)的一部分,...
WebLogic EJB学习笔记主要涵盖了企业级Java Bean(Enterprise JavaBeans,简称EJB)在Oracle WebLogic Server中的应用和管理。EJB是Java EE(Java Platform, Enterprise Edition)平台的核心组件,用于构建可扩展、...
### EJB学习笔记第六部分详解 #### 一、EJB之间的调用 EJB (Enterprise JavaBeans) 是Java EE平台中用于开发分布式企业应用程序的重要组件。在实际开发过程中,经常需要一个EJB调用另一个EJB来实现更复杂的业务...
### EJB3课堂笔记知识点概览 #### 一、EJB 概述 - **EJB 定义**: Enterprise JavaBeans (EJB),即企业级Java Bean,是一种用于开发、部署服务器端分布式组件的标准(规范),它采用了Java语言进行编写。 - **EJB ...
本资料集包含了ejb培训笔记和源代码,旨在帮助学习者深入理解EJB的工作原理及其在实际项目中的应用。 笔记部分可能涵盖以下关键知识点: 1. **EJB概述**:介绍EJB的历史、版本和基本概念,包括EJB 2.x和EJB 3.x的...
**EJB(Enterprise JavaBeans)**是Java...通过这份笔记,学员应该能够理解EJB在企业级应用中的角色,以及如何利用EJB技术来构建高效、可扩展的应用。对于Java EE开发者来说,掌握EJB是提升技能和职业发展的重要一步。
Weblogic EJB 学习笔记主要涵盖了EJB(Enterprise JavaBeans)的基础知识,包括无状态会话bean、有状态会话bean和实体bean这三种主要的EJB类型,以及EJB在Weblogic服务器中的配置和事务管理。 1. **无状态会话bean*...
EJB事物详细讲解:TransactionAttributeType.MANDATORY;TransactionAttributeType.REQUIRED;TransactionAttributeType.REQUIRES_NEW;TransactionAttributeType.SUPPORTS;TransactionAttributeType.NOT_SUPPORTED...
【EJB学习笔记、运行机制】 企业级程序(Enterprise Application)是围绕商业目的设计的,具有分布分层的程序架构。这种类型的程序旨在满足大型企业的复杂需求,通常涉及多个组件和层,确保系统的稳定性和可扩展性...
【EJB学习笔记2】 EJB,全称Enterprise JavaBeans,是Java EE(现在被称为Jakarta EE)平台的一部分,主要用于构建可复用的、安全的、可伸缩的服务器端应用程序。EJB标准定义了一组规范,使得开发者可以创建分布式...
【EJB学习笔记】 EJB,全称为Enterprise Java Beans,是Java平台上的一个标准,用于开发和部署服务器端的分布式组件。它基于Java语言,为创建高效能、安全且可扩展的企业级应用提供了框架。EJB规范由Java ...
EJB,全称为Enterprise Java Beans,是Java平台上的一个核心组件,用于构建企业级应用程序。它是一个规范,由Java Specification Request (JSR) 220定义,属于Java Community Process (JCP)的一部分。EJB允许开发者...
本笔记代码主要涵盖了EJB3的一些核心特性,包括定时任务(timer)、会话bean(session)、实体bean(entity)、拦截器(interceptor)、领域模型(domain)、客户端(client)、事务管理(transaction)、消息传递...
### EJB学习笔记4:深入理解实体与JPA #### 实体的概念与作用 实体,在企业级Java开发中,特别是EJB(Enterprise JavaBeans)框架下,指的是具有持久化能力的POJO(Plain Old Java Object)类。不同于实体Bean...
**企业级JavaBeans(Enterprise JavaBeans,简称EJB)**是Java平台上的核心组件模型,主要用于构建可扩展、安全和事务处理的企业级应用程序。EJB技术由Java EE(Java Platform, Enterprise Edition)提供,它是Java...
ejb3.0入门经典笔记,我是我自己总结,希望对大家有帮助!
### EJB学习笔记8:深入理解事务处理机制 #### 一、事务的背景知识 **事务**是指一系列操作,这些操作作为一个不可分割的工作单元来执行,即要么全部完成,要么完全不执行。事务的主要特性包括: - **原子性...
### 深入解析《ejb学习笔记5》——消息驱动Bean详解 #### 消息驱动Bean概述 消息驱动Bean(MDB,Message Driven Bean)是Enterprise JavaBeans(EJB)框架中的一个重要组成部分,主要用于接收并处理来自消息中间件...
### 基于Weblogic的EJB学习笔记详解 #### EJB基础知识概览 ##### 1. 无状态会话Bean (Stateless Session Bean) 无状态会话Bean是一种不保存客户端会话状态的EJB组件。这意味着每个客户端的请求都不依赖于前一个...