`
bluepopopo
  • 浏览: 92334 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java transaction笔记(二)

    博客分类:
  • J2EE
阅读更多
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 复习笔记

    除此之外,Java EE的网络通信、安全、JMS(Java Message Service)、JTA(Java Transaction API)等都是开发者需要掌握的重要知识点。网络通信涉及到HTTP、HTTPS等协议,以及WebSocket等实时通信技术;安全性包括...

    java web 笔记整理

    5. **JTA(Java Transaction API)**:JTA定义了事务管理的标准接口,使得应用可以进行分布式事务处理。在Java Web环境中,容器(如Tomcat或WebLogic)通常会提供对JTA的支持,确保多操作的原子性、一致性、隔离性和...

    Java经典笔记(SHH)

    Java经典笔记(SHH)是一份深度覆盖Java开发技术的宝贵资源,包含了Struts、Spring和Hibernate这三大著名框架的详细讲解。这份笔记是作者经过两个月深入学习和实践的结晶,旨在帮助Java开发者全面掌握核心技术和实用...

    Java JDK 6.0 学习笔记.pdf

    **Java JDK 6.0 学习笔记** Java JDK(Java Development Kit)是Java编程语言的核心组件,包含Java运行环境、编译器、类库以及各种工具,是开发者进行Java程序开发的基础。Java JDK 6.0是Oracle公司发布的一个重要...

    达内java笔记,精挑细选(达内助教整理)

    "达内java笔记,精挑细选(达内助教整理)"是一个专门为学习Java和J2EE技术而准备的学习资料集,包含了助教精心筛选和整理的知识要点。这份笔记将帮助初学者或有经验的开发者快速掌握J2EE的核心概念和技术。 首先,...

    JAVA学习笔记2

    ### JAVA学习笔记2:深入理解JDBC与J2EE事务管理 #### 1. JDBC连接池与资源管理 在JAVA学习的过程中,理解JDBC(Java Database Connectivity)的重要性不容忽视。JDBC是Java语言中用来规范客户端程序如何访问...

    Java相关课程系列笔记之十四Hibernate学习笔记

    【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...

    Java分布式应用学习笔记

    Java Transaction API (JTA) 和Java Transaction Service (JTS) 提供了分布式事务管理的框架,允许跨多个资源(如数据库和消息队列)的事务操作。 6. 高可用性和容错 为了确保系统的稳定性,Java提供了负载均衡...

    [Java学习笔记doc]Hibernate学习教程和笔记

    【Java学习笔记doc】Hibernate学习教程和笔记 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java开发者与数据库之间的交互。这个文档集合是针对Java初学者和进阶者的一份宝贵资料,旨在深入理解...

    (事物学习笔记二) 对Java事物的理解

    本文将深入探讨“事物学习笔记二”中关于Java事务的理解,旨在帮助读者更好地掌握这一关键概念。 首先,事务(Transaction)是数据库操作的基本单位,它确保一组数据库操作要么全部成功,要么全部失败,从而保证...

    java学习笔记

    学习笔记中,可能会讲解Hibernate配置、实体类、映射文件、Session和Transaction的使用,以及查询语言HQL等。 通过这些笔记,你将能够深入理解Java编程语言、数据库管理和企业级开发的关键技术,为成为合格的Java...

    Java面试笔记-基础问题篇.docx

    Java是一种广泛使用的高级编程...以上仅是Java面试笔记中的部分知识点,实际面试中可能涉及更多细节和深入问题。对于求职者来说,熟练掌握这些基础知识,并能结合实际项目经验进行深入讨论,将有助于在面试中脱颖而出。

    JAVAWEB开发实战经典(课堂笔记)

    5. **Java EE相关技术**:包括JNDI(Java Naming and Directory Interface)、JTA(Java Transaction API)和JMS(Java Message Service)等,这些在企业级Java应用中广泛使用,笔记可能涉及这些技术的基本概念和...

    Java EE 超级核心技术笔记与代码

    7. **JTA(Java Transaction API)** - JTA定义了分布式事务处理的标准,确保在多组件环境中的一致性和可靠性。 8. **JMS(Java Message Service)** - JMS允许应用之间通过消息进行通信,支持点对点和发布/订阅...

    hibernate个人学习笔记完整版

    在学习笔记中,你将首先了解Hibernate的核心概念,包括实体(Entity)、持久化(Persistence)、会话(Session)和事务(Transaction)。实体是ORM中对应数据库表的对象,持久化则意味着将这些对象的状态保存到...

    JAVA-hibernate笔记

    除了基础内容,课程可能还会涉及更多高级主题,如二级缓存、CGLIB动态代理、JPA规范等,以帮助你全面掌握Hibernate。 **学习风格** - **先脉络,后细节** 先整体理解Hibernate的工作流程和核心概念,再深入研究...

    JAVA高级软件工程师培训笔记

    ### JAVA高级软件工程师培训笔记知识点概述 #### 一、Hibernate数据持久化组件 ##### 对象持久化(Object Persistence) - **定义**: 对象持久化是指将内存中的数据对象保存到持久化的存储介质上(如硬盘、数据库等...

    2023年Java相关课程系列笔记之十四Hibernate学习笔记.doc

    在本篇“2023年Java相关课程系列笔记之十四Hibernate学习笔记”中,我们将深入探讨Java开发中常用的持久化框架——Hibernate。这个框架由梁建全老师主讲,旨在帮助开发者更高效、便捷地进行数据库操作,弥补JDBC在...

Global site tag (gtag.js) - Google Analytics