当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

Java理论和实践: 理解JTS ― 幕后魔术[Java编程]

赞助商链接



  本文“Java理论和实践: 理解JTS ― 幕后魔术[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在这个关于事件的系列文章的 第 1 部份,我们报告了一些底子知识,包含什么是事件,以及事件关于构建坚固的分布式利用程序来说至关重要的缘由.在这一部份,我们将探究若何将 J2EE 利用程序构建到事件中,以及 JTS 和 J2EE 容器若何设法使事件服务(包含事件划分、资源征用和事件传达)对组件程序员来说几近是不可见的.请单击文章顶部或底部的 谈论,在 谈论论坛与作者和其他读者分享您对本文的设法.

在这个系列的 第 1 部份,我们谈论了事件并研究了它们的基本属性 ― 原子性(atomicity)、一致性(consistency)、孤独性(isolation)和长期性(durability).事件是企业利用程序的基本构件;没有它们,几近不大概构建有容错本领的企业利用程序.幸运的是,Java 事件服务(Java Transaction Service,JTS)和 J2EE 容器自动为您做了大量的事件管理工作,这样您就不必将事件意识直接集成到组件代码中.后果简直是一种魔术 ― 通过服从几条简单的法则,J2EE 利用程序便可以自动得到事件性语义,只需极少或根本不需求额外的组件代码.本文旨在通过展示事件管理若何发生,以及发生在何处来揭开这个魔术的奥秘面纱.

什么是 JTS?

JTS 是一个 组件事件监督器(component transaction monitor).这是什么意思?在第 1 部份,我们介绍了 事件处理监督器(TPM)这个概念,TPM 是一个程序,它代表利用程序调和分布式事件的履行.TPM 与数据库呈现的时间长短差不多;在 60 年代后期,IBM 首先开辟了 CICS,至今人们仍在利用.经典的(大概说 程序化)TPM 管理被程序化定义为针对事件性资源(比方数据库)的操作序列的事件.随着分布式对象协议,如 CORBA、DCOM 和 RMI 的呈现,人们但愿看到事件更面向对象的前景.将事件性语义奉告面向对象的组件要求对 TPM 模子举行扩大 ― 在这个模子中事件是按照事件性对象的调用办法定义的.JTS 只是一个组件事件监督器(有时也称为 对象事件监督器(object transaction monitor)),或称为 CTM.

JTS 和 J2EE 的事件支持计划受 CORBA 对象事件服务(CORBA Object Transaction Service,OTS)的影响很大.实际上,JTS 实现 OTS 并充当 Java 事件 API(Java Transaction API)― 一种用来定义事件边界的初级 API ― 和 OTS 之间的接口.利用 OTS 替换成立一个新对象事件协议遵守了现有尺度,并使 J2EE 和 CORBA 可以彼此兼容.

乍一看,从程序化事件监督器到 CTM 的改变仿佛只是术语名称改变了一下.但是,差别不止这一点.当 CTM 中的事件提交或回滚时,与事件相关的对象所做的全部更改都一同被提交或撤消.但 CTM 怎么知道对象在事件期间做了什么事?象 EJB 组件之类的事件性组件并没有 commit() 或 rollback() 办法,它们也没向事件监督器注册自己做了什么事.那么 J2EE 组件履行的操作若何变成事件的一部份呢?

透明的资源征用

当利用程序状况被组件操作时,它仍旧存储在事件性资源管理器(比方,数据库和消息行列服务器)中,这些事件性资源管理器可以注册为分布式事件中的资源管理器.在第 1 部份中,我们谈论了如安在单个事件中征用多个资源管理器,事件管理器若何调和这些资源管理器.资源管理器知道若何把利用程序状况中的改变与特定的事件关联起来.

但这只是把问题的核心从组件转移到了资源管理器 ― 容器若何断定什么资源与该事件有关,可以供它征用?请考虑下面的代码,在典型的 EJB 会话 bean 中您大概会发现这样的代码:

清单 1. bean 管理的事件的透明资源征用

InitialContext ic = new InitialContext();
  UserTransaction ut = ejbContext.getUserTransaction();
  ut.begin();
  DataSource db1 = (DataSource) ic.lookup("java:comp/env/OrdersDB");
  DataSource db2 = (DataSource) ic.lookup("java:comp/env/InventoryDB");
  Connection con1 = db1.getConnection();
  Connection con2 = db2.getConnection();
  // perform updates to OrdersDB using connection con1
  // perform updates to InventoryDB using connection con2
  ut.commit();

注意,这个示例中没有征用当前事件中 JDBC 衔接的代码 ― 容器会为我们完成这个任务.我们来看一下它是若何发生的.


  以上是“Java理论和实践: 理解JTS ― 幕后魔术[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .