续
Java transaction笔记(一, 继续我的transaction之旅。这次是XA transaction.
Wiki对于XA的描述
引用
在计算技术上,XA规范是 The Open Group关于分布式事务处理 (DTP)的规范。规范描述了全局的事务管理器与局部的资源管理器之间的接口。XA规范的目的是允许的多个资源(如数据库,应用服务器,消息队列,等等)在同一事务中访问,这样可以使ACID属性跨越应用程序而保持有效。XA使用两阶段提交来保证所有资源同时提交或回滚任何特定的事务。
XA规范描述了资源管理器要支持事务性访问所必需做的事情。遵守该规范的资源管理器被称为XA compliant。
在j2ee中,典型的应用场景是在
同一事务中应用db和jms,或是不同的db.
public void doSometing()
{
updateDatabase();
sendJMSMessage();
}
在非XA应用中,message一旦被发送至queue或topic,则会立即被接受方消费。所以即使updateData()出错,整个doSometing()需要回滚时,sendJMSMessage()已经提交无法再回滚了。
如果应用了XA,则message一直被保持在queue中直至整个事务提交。
XA的要求
对于jms来说,需要配置支持XA的 connection factory.
对于db来说,需使用支持XA的JDBC driver.
两阶段提交(2 phase commit)
先说transaction的管理,如下图。
transaction manager与不同的resource manager都有交互。
在phase1时,transaction manager向两个resouce询问是否可以准备提交。Resouce可回复ready, not_ready或是read_only. 当两个都ready时,则可以进入phase2 进行提交。任何一个回复not_ready则整个transaction 回滚。回复read_only的资源在phase2阶段被排除在提交过程之外。
Last resource commit optimization
有app server可以允许非XA的资源加入到XA的事物中来。简单说来,就是在phase1 XA的资源发送ready 讯号给transaction manager,则立即对非XA的资源进行commit,一旦它成功提交,再对XA的资源进行phase2 提交。 倘若在这个过程中,非XA的资源commit时出错,在phase2 所有的XA的资源都会收到rollback的请求.
当然使用LRCO的问题也还是有的,首先是不同的server对此可能有不同的实现,那么移植将是一个问题。其次就是 使用它会导致 heuristic exception出现的概率上升。
Heuristic exception一般出现于phase1两个资源可能有的timeout.
总结
使用XA是一件比较麻烦的事,特别是有可能出现一些在local transaction中没有见过的错误,譬如heuristic exception. 还有一个限制,就是在db的procedure中不能出现DDL.
除非你确实需要在
同一个事务中管理多个资源,否则尽量选择其他方案。举个例子,有一个EJB需要横跨两个db进行查询,在非XA的情况下,可以第二个db的访问转移到一个local bean的方法中,并将这个方法的事务属性声明为 not supported.
分享到:
相关推荐
除此之外,Java EE的网络通信、安全、JMS(Java Message Service)、JTA(Java Transaction API)等都是开发者需要掌握的重要知识点。网络通信涉及到HTTP、HTTPS等协议,以及WebSocket等实时通信技术;安全性包括...
5. **JTA(Java Transaction API)**:JTA定义了事务管理的标准接口,使得应用可以进行分布式事务处理。在Java Web环境中,容器(如Tomcat或WebLogic)通常会提供对JTA的支持,确保多操作的原子性、一致性、隔离性和...
Java经典笔记(SHH)是一份深度覆盖Java开发技术的宝贵资源,包含了Struts、Spring和Hibernate这三大著名框架的详细讲解。这份笔记是作者经过两个月深入学习和实践的结晶,旨在帮助Java开发者全面掌握核心技术和实用...
**Java JDK 6.0 学习笔记** Java JDK(Java Development Kit)是Java编程语言的核心组件,包含Java运行环境、编译器、类库以及各种工具,是开发者进行Java程序开发的基础。Java JDK 6.0是Oracle公司发布的一个重要...
"达内java笔记,精挑细选(达内助教整理)"是一个专门为学习Java和J2EE技术而准备的学习资料集,包含了助教精心筛选和整理的知识要点。这份笔记将帮助初学者或有经验的开发者快速掌握J2EE的核心概念和技术。 首先,...
### JAVA学习笔记2:深入理解JDBC与J2EE事务管理 #### 1. JDBC连接池与资源管理 在JAVA学习的过程中,理解JDBC(Java Database Connectivity)的重要性不容忽视。JDBC是Java语言中用来规范客户端程序如何访问...
【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...
Java Transaction API (JTA) 和Java Transaction Service (JTS) 提供了分布式事务管理的框架,允许跨多个资源(如数据库和消息队列)的事务操作。 6. 高可用性和容错 为了确保系统的稳定性,Java提供了负载均衡...
【Java学习笔记doc】Hibernate学习教程和笔记 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java开发者与数据库之间的交互。这个文档集合是针对Java初学者和进阶者的一份宝贵资料,旨在深入理解...
本文将深入探讨“事物学习笔记二”中关于Java事务的理解,旨在帮助读者更好地掌握这一关键概念。 首先,事务(Transaction)是数据库操作的基本单位,它确保一组数据库操作要么全部成功,要么全部失败,从而保证...
学习笔记中,可能会讲解Hibernate配置、实体类、映射文件、Session和Transaction的使用,以及查询语言HQL等。 通过这些笔记,你将能够深入理解Java编程语言、数据库管理和企业级开发的关键技术,为成为合格的Java...
Java是一种广泛使用的高级编程...以上仅是Java面试笔记中的部分知识点,实际面试中可能涉及更多细节和深入问题。对于求职者来说,熟练掌握这些基础知识,并能结合实际项目经验进行深入讨论,将有助于在面试中脱颖而出。
5. **Java EE相关技术**:包括JNDI(Java Naming and Directory Interface)、JTA(Java Transaction API)和JMS(Java Message Service)等,这些在企业级Java应用中广泛使用,笔记可能涉及这些技术的基本概念和...
7. **JTA(Java Transaction API)** - JTA定义了分布式事务处理的标准,确保在多组件环境中的一致性和可靠性。 8. **JMS(Java Message Service)** - JMS允许应用之间通过消息进行通信,支持点对点和发布/订阅...
在学习笔记中,你将首先了解Hibernate的核心概念,包括实体(Entity)、持久化(Persistence)、会话(Session)和事务(Transaction)。实体是ORM中对应数据库表的对象,持久化则意味着将这些对象的状态保存到...
除了基础内容,课程可能还会涉及更多高级主题,如二级缓存、CGLIB动态代理、JPA规范等,以帮助你全面掌握Hibernate。 **学习风格** - **先脉络,后细节** 先整体理解Hibernate的工作流程和核心概念,再深入研究...
### JAVA高级软件工程师培训笔记知识点概述 #### 一、Hibernate数据持久化组件 ##### 对象持久化(Object Persistence) - **定义**: 对象持久化是指将内存中的数据对象保存到持久化的存储介质上(如硬盘、数据库等...
在本篇“2023年Java相关课程系列笔记之十四Hibernate学习笔记”中,我们将深入探讨Java开发中常用的持久化框架——Hibernate。这个框架由梁建全老师主讲,旨在帮助开发者更高效、便捷地进行数据库操作,弥补JDBC在...