权衡Apache Geronimo EJB事务选项,第2部分: Bean管理事务

既然您已经在 第 1 部分 学习了有关 Enterprise JavaBeans (EJB) 容器管理的事务的所有细节,那么您可能对 EJB bean 管理的事务以及如何在 Apache Geronimo 应用服务器中实现它感到好奇。在由三部分组成的 系列文章 的这一期文章(第 2 部分)中,您可以获得所有细节。

简介

本系列分为三部分,将探索 Geronimo 和 OpenEJB 可以为您提供什么帮助,以及在 EJB 2.1 中现在可以实现的 EJB 事务概念(让您顺利进入 EJB 3.0)。第 2 部分(即本文)将详细描述 EJB bean 管理的事务,研究可以生成的两种 bean 管理的事务(Java Transaction API (JTA) 和 Java Database Connectivity (JDBC) 事务)的用法。您将了解这些事务的回滚和如何在 Geronimo 中使用 bean 管理的事务。

现在简要回顾一下第 1 部分中涵盖的内容:使用 EJB 事务,您可以从下列两个选项中进行选择:

您可以将事务实现委托给 EJB 容器。这就是容器管理的事务,也是本系列文章第 1 部分的焦点。请参阅 第 1 部分,获得对事务和容器管理的事务的简介。

在提交事务和将其回滚时,允许通过编程方式管理企业 bean。应用程序开发人员必须明确将事务逻辑编入企业 bean 代码来实现它。这就是 bean 管理的事务,是本系列的第 2 部分(也就是本文)的焦点。

在第 3 部分中,您将了解与容器管理的事务和 bean 管理的事务有关的难题和附加特性。

bean 管理的事务

与 bean 管理的事务相比较,容器管理的事务更简单且代码更少。但是在使用容器管理的事务时存在以下情况:您的企业 bean 方法既可以参与到事务中,也可以不参与。如果您需要更粗略的逻辑,并在基于特定有效性逻辑的情况下使用粗略逻辑提交事务或回滚事务,那么您应该使用 bean 管理的事务。bean 管理的事务可使您对事务边界进行全面控制。

会话 bean 或消息驱动 bean (MDB) 可以使用 bean 管理的事务。实体 bean 不能使用 bean 管理的事务。这是因为 EJB 容器控制了加载或存储实体 bean 的数据的时间。

在 bean 管理的事务中,容器必须允许 bean 实例在一个方法中连续执行几个事务,但是要记住,不能执行嵌套事务。如果您试图启动一个新事务而 bean 实例还没有提交前一个事务,那么容器将抛出一个异常。

您可以使用两种类型的 bean 管理的事务:

JTA 事务

JDBC 事务

我们将在下一节中查看这两种事务。

JTA 事务

JTA 是事务管理器和分布式事务处理系统所涉及的其他组件之间的一个接口规范。通过使用接口,不必使用事务管理器的特有 API 就可以单独地划分事务。

所有 EJB 容器都必须支持 JTA API。对于一名开发人员,这允许您将事务指令传达给 EJB 容器,并以通用、简单的方式提供事务指令。此方法使您不必担心事务服务的底层工作。

javax.transaction.UserTransaction

使用 bean 管理的 JTA 事务时,可使用 javax.transaction.UserTransaction 接口来划分事务。在该接口上,有三个有趣的方法:

begin() —— 创建一个新的事务,并将该事务与当前线程关联起来。

commit() —— 提交与当前线程有关联的事务。

rollback() —— 强行回滚与当前线程有关联的事务。

在 begin() 和 commit() 之间发生的所有更新都是在一个事务中完成的。

UserTransaction 接口上的其他方法包括:

getStatus() —— 检索与当前线程有关的事务的状态。返回值是 javax.transaction.Status 接口上定义的常数。

setRollbackOnly() —— 强行使事务终止。

setTransactionTimeout(int) —— 设置事务中止前能运行的最大次数。这在避免死锁时很有用。

请参阅本文的 参考资料 部分,获得 Sun 公司的 JavaDocs 中有关 UserTransaction 和 UserStatus 接口的链接。

如何使用 bean 方法获得 UserTransaction 的最初引用呢?基于企业 bean 的类型,您可从 bean 上下文中获得接口:

对于会话 bean,可从 javax.ejb.EJBContext 调用 getUserTransaction()。

对于 MDB,可从 MessageDrivenContext.getUserTransaction() 调用 getUserTransaction()。

时间: 2024-11-03 07:19:37

权衡Apache Geronimo EJB事务选项,第2部分: Bean管理事务的相关文章

权衡Apache Geronimo EJB事务选项,第3部分: 综合所有事务

Jonathan Sagorin 在 由三部分组成的系列文章 的最后一部分中对 Enterprise JavaBeans(EJB)事务进行了全面的揭示.探索 Apache Geronimo 应用服务器上与容器管理事务和 bean 管理事务都相关的难题和附加实现与配置选项. 简介 在本系列的 第 1 部分 和 第 2 部分 中,您简单了解了 bean 管理的和容器管理的 EJB 事务以及如何在 Geronimo 应用服务器上实现它们.那么接下来呢?在使用 EJB 事务时,您应考虑哪些其他事务设置是

权衡Apache Geronimo EJB事务选项,第1部分: 容器管理事务

本系列分为三部分,将探索 Apache Geronimo 中的 Enterprise JavaBeans (EJB) 容器管理事务和 bean 管理事务.在第 1 部分中,将找出两种事务之间的差异,其中包括了解容器管理事务如何帮助您避免事务逻辑和管理的复杂性,从而使您可以专注于企业 bean 的业务逻辑.您还将学会如何在 Geronimo 应用服务器中实现容器管理事务,以及如何使用 Geronimo.OpenEJB 和 XDoclet 将自己从繁重的 EJB 编码工作中解放出来. 简介 Open

在Apache Geronimo上远程部署Web应用程序: 研究各种选项

Apache Geronimo 是一种认证的 Java 2 Platform Enterprise Edition(J2EE) 1.4 应用服务器.大多数人在想到 J2EE 时,会想到事务管理.Web 应用程序和异步消息传递等东西.但是,有了这些特性也不一定能够通过 J2EE 认证.应用服务器必须提供任务关键型生产系统所需的许多工具.这些工具之一是远程部署.Geronimo 是为满足大多数部署场景而设计的,所以它包含对远程部署的支持. 远程部署和 JSR 88 远程部署是任何 J2EE 认证的应

Geronimo renegade: OpenEJB和Apache Geronimo的EJB实现

Enterprise JavaBeans (EJBs) 到底有什么了不起的,为什么对 Java 2 Platform, Enterprise Edition (J2EE) 开发来说如此重要?在这一期的 Geronimo 叛逆者 专栏中,OpenEJB 的共同创始人 David Blevins 将介绍 EJB 可以为您做什么,并解释 OpenEJB 如何被选择作为 Apache Geronimo 的 EJB 实现. 简介 说实在的,在我 看来,EJB 并不好用.它们需要开发人员在应用程序中投入比他

在Apache Geronimo应用程序中实现和部署Web服务

现在,无论您的企业应用程序是部署在小型家庭商店中,还是跨多个领域的企 业基础设施的一部分,无论应用程序是否与他人协作,它都必须支持 Web 服务. 途径 现代企业往往是非常复杂的系统,每天要面对许多机会和挑 战.许多机会涉及到与其他系统和企业进行集成或协作.因此,明智的企业应用 程序开发人员要确保别的应用程序可以轻松地访问自己的应用程序.Web 服务就 是提供这种可访问性的好方式. Apache Geronimo 应用服务器支持 Web 服务以及最新 Java 2 Platform, Enter

集成DB2与Apache Geronimo

简介:Apache Geronimo 是部署 Java 2 Platform, Enterprise Edition (J2EE) 应用程序的 一个新的很受欢迎的替代方案.IBM DB2 是一个成熟的关系数据库产品,非常适用于 J2EE 环境. IBM 软件工程师 Emilio Zegarra 将详细介绍如何将这两个产品集成到 J2EE 应用程序中. 概述:Apache Geronimo Apache Geronimo 项目成功构建了一个开源的.J2EE 兼容的应用服务 器.该应用服务器非常强大

Apache Geronimo和Spring框架,第6部分:Spring MVC:使用Web视图技术

简介:本教程是系列教程(共六部分)的最后一部分,向您展示了如何利用 Spring 框架来使用 JavaServer Page(JSP).Velocity.Tile 和 PDF 导出功能.您将用 Model-View-Controller (MVC)中的 V 做试验,即 Spring MVC 中内置的各种 Web 视图.通过对 Spring MVC 所支持的各种视 图技术的全面介绍,您将看到在整个系列教程中构建的样例电话本应用程序中实现这些技术有多么轻松. 开始之前 本系列教程适合于需要了解 Sp

Apache Geronimo和Spring框架,第5部分: Spring MVC

简介:Spring Model-View-Controller(MVC)是 Spring 框架中应用最广泛的模块.它基于一种干净 的设计,并提供了很多开箱即用的类.本教程是系列教程(共六部分)的第五部分,通过向电话本示例应 用程序中添加更多功能详细介绍了 Spring MVC.在此过程中,您将了解如何利用丰富的 Spring MVC API 集中的有用类,如何定义易于理解的控制器来处理 JavaServer Page(JSP)的操作,如何扩展和 使用由 Spring MVC 提供的数据验证类等等

Apache Geronimo和Spring 框架,第4部分

混合使用Spring AOP和Spring Web Flow 简介:本系列教程共分为 6 个部分,这是其中的第 4 部分,介绍了 Spring AOP 模块提供的面向方 面编程(Aspect-Oriented Programming,AOP)支持.通过本教程,您将会了解 Spring 框架如何简化使 用 AOP 的过程,会看到 Spring Web Flow (SWF) 模块,并了解如何以 XML 配置文件格式声明性地定义 应用程序的 Web 流程.您还将看到 Apache Geronimo W