`

关于J2EE Tranaction的几个基本概念

阅读更多

        Transaction不管在J2EE还是.NET领域中都是相当重要的一个组成部分。尽管很多与Transaction相关的概念在两个不同的平台中都是相通的,但是它们在Transaction的实现方面却有着很多的不同。想对.NET下的Transaction有更深入了解的朋友,可以参考idior兄写的Transaction in ADO.net 2.0。在以下的篇幅里面,我就J2EE中与Transaction相关的几个概念做些讲述。
        1.什么是Transaction?所谓Transaction是指一系列不可分割的改动数据库的操作。在这个解释中,有三个关键词:一系列不可分割以及改动。仅仅是一个改动数据库的操作是没有Transaction可言,只有“一系列”操作(一组SQL语句)才可能组成Transaction;“不可分割”就意味着一致性和完整性,要么这一系列操作全部commit,要么就全部rollback;如果一系列的操作只包含enquiry操作,那么这些操作也不是Transaction。 
        2.在J2EE中,Transaction主要有几大类,具体有几种?在J2EE中,Transaction主要有Bean-Managed Transaction和Container-Managed Transaction两大类。其中在Bean-Managed Transaction中还会分为JDBC Transaction和JTA Transaction两种。
        3.什么是JDBC Transaction?它有怎样的特点?JDBC Transaction是指由Database本身去管理的事务。其最大的特点就是通过显示调用Connection接口的commit和rollback方法来完成事务的提交和回滚。事务结束的边界是commit或者rollback方法的调用,而开始的边界则不是那么明显了,它会开始于组成当前事务的所有statement中的第一个被执行的时候。具体代码如下:

class CreditDAoImpl implements CreditDAO {
    Connection conn 
= getConnection();
    
public void transfer(Currency amount, Account fromAccount, Account toAccount) throws CreditException {
        
try {
             conn.setAutoCommit(
false);
             depositToAccount(conn, toAccount, amount);
             withdrawFromAccount(conn, fromAccount, amount);     
             conn.commit();
        }
 catch (Exception e) {
            
try {
                 conn.rollback();
                 
throw new CreditException(e.getMessage());
            }
 catch (SQLException e1) {
                 
throw new CreditException(e.getMessage());
            }
                       
        }
 
    }

}

        4.什么是JTA Transaction?它有怎样的特点呢?JTA Transaction是指由J2EE Transaction manager去管理的事务。其最大的特点是调用UserTransaction接口的begin,commit和rollback方法来完成事务范围的界定,事务的提交和回滚。JTA Transaction可以实现同一事务对应不同的数据库,但是它仍然无法实现事务的嵌套。具体的代码如下[1]

public void withdrawCash(double amount) {
   UserTransaction ut 
= context.getUserTransaction();
   
try {
      ut.begin();
      updateChecking(amount);
      machineBalance 
-= amount;
      insertMachine(machineBalance);
      ut.commit();
   }
 catch (Exception ex) {
       
try {
          ut.rollback();
       }
 catch (SystemException syex) {
           
throw new EJBException
              (
"Rollback failed: " + syex.getMessage());
       }

       
throw new EJBException 
          (
"Transaction failed: " + ex.getMessage());
    }

}

        5.什么是Container-Managed Transaction?它又有怎样的特点呢?Container-Managed Transaction,顾名思义,就是由Container负责管理的Transaction,当然这样Transaction是出现在EJB的范畴中。Container-Managed Transaction最大的特点是不需要显式界定事务的边界,也不需要显式的提交或者回滚事务,这一切都由Container来替我们完成。我们需要做的就是设定在一个Bean中,哪些方法是跟事务相关的,同时设定它们的Transaction Attribute既可。
        Transaction的Scope是相当重要的,特别是在一个Bean的方法中调用另外一个Bean的方法。为了便于说明问题,我们把这两个方法分别称为methodA和methodB。当methodA调用methodB的时候,methodB在事务的层面上对调用者methodA有怎样的限制(methodB中是否存在事务)以及methodA如何在事务的层面上实现对methodB的调用(是否需要重新创建一个新的事务来处理methodB的调用)都需要通过Transaction Attribute来设定的。具体的Transaction Attribute有以下六种:Required,RequiresNew,Mandatory,NotSupported,Supports和Never。有关Transaction Attribute的介绍,可以参阅J2EE Tutorial中关于Container-Managed Transaction的介绍

        [1] 代码来自SUN的J2EE Tutorial中关于Bean-Managed Transaction的介绍

分享到:
评论

相关推荐

    数据库系统及应用实验报告(一).doc

    数据库系统及应用实验报告(一)是关于 SQL Server 2000 的操作环境实验报告,旨在了解 SQL Server 2000 及其主要功能、工具和实用程序、系统数据库及样本数据库,并掌握企业管理器和查询分析器的基本操作方法。...

    数据库服务器规划.doc

    1. **性能指标**:选择`Database-Tranaction/sec`作为分析指标,观察其随时间的变化趋势。 2. **数据可视化**:绘制CPU利用率和网络流量的图表。 3. **趋势分析**:使用Excel工具,添加趋势线并显示公式,如Y = 0....

    abap入门教材(中文)

    ABAP/4(Advanced Business Application Programming) SAP/R3, 4GL, Visual BasicJAVA, third-generation , C,PASCAL , (Program Structure Module) : 1.Sequential coding ... , database tranaction process

    8.18发烧购物节活动SOP - 电商日化行业+电商引流转化(5张子表全案).xlsx

    8.18发烧购物节活动SOP - 电商日化行业+电商引流转化(5张子表全案)

    网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码.zip

    网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码.zip,个人经导师指导并认可通过的高分大作业项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码.zip网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码.zip网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码.zip网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码.zip网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码.zip网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码.zip网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码.zip网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码.zip网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码.zip网页设计期

    ntu嵌入式所有周实验文件

    ntu嵌入式所有周实验文件

    WordPress子比AI自动发文章插件AI辅助写作随更版wapai-ai-create.zip

    一款可以快速借助ChatGPT,快速生成大量原创有深度文章,快速丰富网站内容,完全免费,新建文章标题跟分类后,点击生成即可自动生成文章,生成后可以点击查看文章直达文章界面,分类可以设置不存在的,程序发现不存在会自动新建。

    Adobe Camera Raw(RAW处理工具)v17.1.0.mp4

    Adobe Camera Raw(RAW处理工具)v17.1.0.mp4

    2024圣诞节倒计时页面源码.mp4

    2024圣诞节倒计时页面源码.mp4

    MaixPy机械臂井字棋游戏开发源码-最新开发(可比赛用).zip

    MaixPy机械臂井字棋游戏开发源码-最新开发(可比赛用).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

    理工大学本科毕业设计-基于深度学习的行人重识别系统python源码.zip

    理工大学本科毕业设计-基于深度学习的行人重识别系统python源码.zip,个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 理工大学本科毕业设计-基于深度学习的行人重识别系统python源码.zip理工大学本科毕业设计-基于深度学习的行人重识别系统python源码.zip理工大学本科毕业设计-基于深度学习的行人重识别系统python源码.zip理工大学本科毕业设计-基于深度学习的行人重识别系统python源码.zip理工大学本科毕业设计-基于深度学习的行人重识别系统python源码.zip理工大学本科毕业设计-基于深度学习的行人重识别系统python源码.zip理工大学本科毕业设计-基于深度学习的行人重识别系统python源码.zip理工大学本科毕业设计-基于深度学习的行人重识别系统python源码.zip理工大学本科毕业设计-基

    感恩母恩母爱如水母亲节主题班会.pptx

    感恩母恩母爱如水母亲节主题班会

    基于java的同城宠物喂遛系统设计与实现.docx

    基于java的同城宠物喂遛系统设计与实现.docx

    乱七八糟聚合类工具箱v1.3.86应有尽有高级版.mp4

    乱七八糟聚合类工具箱v1.3.86应有尽有高级版.mp4

    安卓一木记账v5.8.90解锁VIP绿化高级版.mp4

    安卓一木记账v5.8.90解锁VIP绿化高级版.mp4

    Comsol经典小案例 晶格耦合作用结构色,CIE1931计算与绘制

    Comsol经典小案例。 晶格耦合作用结构色,CIE1931计算与绘制。

    2021中国新锐品牌发展研究:食品饮料行业报告.pdf

    2021中国新锐品牌发展研究:食品饮料行业报告

    得一微YS9082HP+N38A量产工具下载

    YS9082HP_033_HPS1A30C_N38A

    LOL英雄联盟2012怀旧网单.mp4

    LOL英雄联盟2012怀旧网单.mp4

    2020林达阳光新城抖音直播售房脚本.xlsx

    2020林达阳光新城抖音直播售房脚本

Global site tag (gtag.js) - Google Analytics