首页 / 软件开发 / JAVA / 权衡Apache Geronimo EJB事务选项,第1部分: 容器管理事务
权衡Apache Geronimo EJB事务选项,第1部分: 容器管理事务2011-03-13 IBM Jonathan Sagorin本系列分为三部分,将探索 Apache Geronimo 中的 Enterprise Java™Beans (EJB) 容器管理事务和 bean 管理事务。在第 1 部分中,将找出两种事务之间的差异,其中包括了解容器管理事务如何帮助您避免事务逻辑和管理的复杂性,从而使您可以专注于企业 bean 的业务逻辑。您还将学会如何在 Geronimo 应用服务器中实现容器管理事务,以及如何使用 Geronimo、OpenEJB 和 XDoclet 将自己从繁重的 EJB 编码工作中解放出来。简介OpenEJB 是为 Apache Geronimo 选定的 EJB 容器实例。虽然 EJB 3.0 目前已经面市,但直到发布 Geronimo 2.0 版,在 Geronimo 接受 Java 1.5 认证时,Geronimo 才支持 EJB。本系列分为三部分,将使您了解 Geronimo 和 OpenEJB 可以为您提供什么帮助,以及在 EJB 2.1 中现在可以实现的 EJB 事务概念(让您顺利进入 EJB 3.0)。EJB 框架提供的好处是:可以使用事务,但没有事务 API 编程的痛苦。在实现 EJB 事务时,您有两种选择:告诉 EJB 容器处理所有的硬性事务工作(容器管理的事务)。让企业 bean 处理一部分事务工作(bean 管理的事务)。在本系列的第 1 部分中,将从事务的概述开始,然后讨论 EJB 2.1 中描述的 EJB 容器管理的事务。最后用一些代码片断结束介绍,这些代码将显示如何在 Geronimo 应用服务器上实现容器管理的事务。在第 2 部分中,将获得 EJB 2.1 中 bean 管理的事务的概述,并查看一些示例代码实现。在第 3 部分中,将综合这两种事务,并了解与容器管理的事务和 bean 管理的事务有关的难题和附加特性。事务—— 概述什么是事务?为什么它们如此重要?可以考虑一下银行事务这个非常简单的案例:将 100 美元从您的一个活期存款帐户转移到您的储蓄存款帐户。通过进一步的调查,可将这一操作分解为两个更小的操作:银行从您的活期存款帐户减去 100 美元。银行在您的储蓄存款帐户增加 100 美元。如果银行将活期存款额减少 100 美元,但您的储蓄存款额并没有增加 100 美元,那么您可能会感到有点沮丧。就个人而言,我愿意将两个操作视为一个操作。因此,如果您的储蓄存款帐户从没有增加 100 美元,那么 100 美元也决不应从您的活期存款帐户中减去!类似地,在应用过程中,很多业务案例都是进行整体确认的 (all-or-nothing approach)。一些大的操作由一个或多个更小的步骤组成。为了完成操作,操作中的所有 步骤都必须完成或不完成,这种行为称为原子 行为。原子性是事务必须保证的四个特征(或属性)之一。其他三个属性是:一致性隔离性耐久性这四种属性一起被称为 ACID 属性。ACID 属性事务对这些已知 ACID 属性的描述为:事务是原子的。所有操作都被认为是一个工作单元。像前面讨论的那样,是整体确认的。事务是一致的。在执行事务之后,必须将系统维持在一致(或合法)状态下。合法状态的定义取决于系统。根据早先的示例,在执行任何撤消操作之后,银行指示您,将保留您的活期存款帐户为顺差。事务是隔离的。每个事务在同一资源进行操作时与其他事务都是相互隔离的。这可通过数据的锁同步来实现。事务是持久的。资源更新必须避免系统故障,如硬件或网络故障。在分布式系统中,当出现网络故障或数据库崩溃时,恢复过程是必需的。