`
bluepopopo
  • 浏览: 91676 次
  • 性别: 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学习笔记-个人整理的

    {12.15}Transaction}{177}{section.12.15} {12.16}char与varchar2}{178}{section.12.16} {12.17}number}{179}{section.12.17} {12.18}\ttfamily user\_tables, user\_objects}{179}{section.12.18} {12.19}...

    Oracle 10g 学习笔记

    │ Oracle Direct-Path Insert学习笔记 - NyThing的Java日记 - JavaEye技术网站.mht │ oracle 常用傻瓜1000问 - oracle10g - 小呵呵.mht │ oracle 常用傻瓜1000问 - oracle10g - 小呵呵.mht.lnk │ ORACLE 面试...

    java学习笔记之sql常用语句

     TCL(Transaction Control Language):用来对事务进行管理  数据库登录:  win+R运行cmd,输入 双引号里面的内容:"mysql -uroot -proot"回车,root为用户名和密码。  注意:执行win命令,后不需要加“;”,...

    MySQL学习笔记、学习文档

    Java处理高并发量访问的处理.txt Map集合的四种遍历方式.txt Mybatis查询某- -日、周、月数据.txt MySQL安装教程.txt MySQL查询最近-周、月每月、周统计数据.txt MySQL入Ar ]很简单学习笔记李国华.dox Oracle查看表...

    技术笔记(第二部分整理)

    HTML5、CSS3、JavaScript、jQuery、Vue、Axios、Echars、Servlet、JSP、JSTL、EL、SpringMVC、Druid、Redis、MD5、Logback、Poi、FileUpload、Transaction

    spring培训学习笔记

    它是实现IoC(Inversion of Control)容器、非侵入性(No intrusive)的框架,并提供AOP(Aspect-oriented programming)概念的实现方式,提供对持久层(Persistence)、事务(Transaction)的支持,提供MVC Web ...

    java8集合源码分析-common-mistakes:常见错误

    20%的业务代码的Spring声明式事务,可能都没处理正确:transaction 数据库索引:索引不是万能药:sqlindex 判等问题:程序里如何确定你就是你?:equals 数值计算:注意精度、舍入和溢出问题:numeralcalculations ...

    Design-Patterns:笔记

    资工笔记 资料库 Transaction资料库的特性就是ACID Atomicity 不可分割性 Consistency 一致性 Isolation 独立性 Durability 持久性 CAP 资料库理论 Consistency 一致 Availability 可用 Partition Tolerance 中断...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    Transaction-Categorize-Clients:MindSumo向第一资本挑战

    编写了五个Java类来解决该项目。 这些课程中的三个分别解决了三个问题(包括奖金问题)。 另外两个类是助手类。 这些类在下面说明。 用时间和空间复杂度O(n)可以解决这三个问题,其中n是订阅数。 运行笔记本电脑...

    clip:剪辑练习的存储库

    date“:” 2018-12-30“,” user_id“:2}”笔记别忘了用双引号引起来。 进入请求的user_id将被忽略。 将使用作为参数传递的user_id注册该事务。-用于表演交易: ./application <user> <transaction>-对于列表横切...

    jedis使用指南

    具体事务和监听请参考文章:redis学习笔记之事务 暂时找到三种实现方式: 1. 通过jedis.setnx(key,value)实现 import java.util.Random; import org.apache.commons.pool.impl.GenericObjectPool.Config; import ...

    CS448-Project2

    #笔记查询计划程序的原始结构SimpleDB类使用BasicQueryPlanner BasicQueryPlanner在函数createPlan()使用OptimizedProductPlan OptimizeProductPlan实现交叉联接查询中的每个表都使用TablePlan 使用ProductPlan对...

Global site tag (gtag.js) - Google Analytics