事务策略: API层策略-学习如何实现一个简单且健壮的事务策略

简介:对于维护数据的一致性和完整性而言,有效并且健壮的事务策略至关重要。API Layer 事务策 略易于实现,并且非常适合用于大部分业务应用程序。 事务策略 系列文章的作者 Mark Richards 借助 Enterprise JavaBeans (EJB) 3.0 规范的示例,解释了事务策略的含义,以及如何在 Java 平台 上实现它。

不论您是在 EJB 2.1 或 3.0 中使用容器环境,还是使用 Spring Framework 环境, 或者是 Tomcat 和 Jetty 等带有 Java Open Transaction Manager (JOTM) 的 Web 容器环境,都需要一 种事务策略来确保数据库的一致性和完整性。Java Transaction API (JTA) 指定了与事务处理有关的语 法和接口,但是并没有描述如何将这些构建块组合起来。正如建筑工人需要根据一张设计图来将一堆木材 建造成一栋房子一样,您需要一种策略来描述如何 将事务构建块组合在一起。

关于本系列

事务可以改善数据的质量、完整性和一致性,并使您的应用程序更加健壮。在 Java 应用程序中实现 成功的事务处理并非易事,它涉及到设计和编码。在这个 系列文章 中,Mark Richards 将指导您为从简 单应用程序到高性能事务处理等各种用例设计有效的事务策略。

我将在本文介绍的策略名为 API Layer 事务策略。它是最健壮、最简单并且是最容易实现的事务策略 。但是其简单性也带来了一些限制和一些需要考虑的因素,我将对此加以解释。我在代码示例中使用 EJB 3.0 规范;同样的概念也适用于 Spring Framework 和 JOTM。

基本结构

API Layer 事务策略的命名基于这样一个事实:所有事务逻辑包含在逻辑应用程序架构的 API 层。这 个层是一个逻辑层 — 有时也被称为应用程序的域层(domain layer)或 facade 层,它以公共方法或接 口的形式向客户机(或表示层)公开功能。之所以说是逻辑 层,是因为可以从本地访问域层(通过直接 实例化和调用),或通过 HTTP、远程方法调用(RMI)、通过 EJB 使用 RMI over Internet Inter-Orb Protocol (RMI-IIOP),甚至通过 Java Message Service (JMS) 进行远程访问。

图 1 展示了大多数 Java 应用程序的典型逻辑应用程序层堆栈:

图 1. 架构层和事务逻辑

图 1 中的架构实现了 API Layer 事务策略。包含事务逻辑的类使用红色背景表示。注意,这些只包 含应用程序架构的域类(API 层)。客户机层、业务层和表示层没有包含事务逻辑,意味着这些层并不能 开始、提交或回滚事务,也不会包含事务注释,比如 EJB 3.0 中的 @TransactionAttribute 注释。整个 应用程序架构中用于启动、提交和回滚事务的惟一方法就是 API 层的域类中包含的公共方法。这就解释 了为什么 API 层是最健壮、最简单的事务策略。

不要局限在图 1 所示的 4 个层上。应用程序架构可以包含更多的层,也可能包含比这更少的层。可 以将表示层和域层结合放到单个 WAR 文件中,或将域类单独放到一个 EAR 文件中。您可能将域类中包含 的业务逻辑作为一个层,而不是两个。这都不会影响事务策略的工作方式或实现方式。

这个事务策略非常适合拥有粗粒度 API 层的应用程序。并且由于表示层并未包含任何事务逻辑(甚至 更新请求),因此此策略非常适合那些必须支持多客户机通道的应用程序,包括 Web 服务客户机、桌面 客户机和远程客户机。但是这种灵活性需要付出一定代价 — 即客户机层仅限于对给定事务工作单元的单 一请求。我将在本文后面解释这一限制的必要性。

时间: 2025-01-30 11:56:14

事务策略: API层策略-学习如何实现一个简单且健壮的事务策略的相关文章

学习servlet,写一个简单的Helloword出现404错误

问题描述 学习servlet,写一个简单的Helloword出现404错误 解决方案 不需要 /servlet 解决方案二: 解决方案三: web.xml内容贴下来看看. 可以参考 我写的http://blog.csdn.net/evankaka/article/details/45151569 解决方案四: url里把[/Hello]改成[/HelloServlet] 和你Web.xml里配置的url-pattern一样. 解决方案五: 一个简单的Servlet 解决方案六: 采用servle

WindowsApi学习笔记-创建一个简单的窗口

#include <windows.h> LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数的函数原型 int APIENTRY WinMain( //APIENTRY是__stdcall的宏定义 HINSTANCE hInstance, //本模块的实例句柄 HINSTANCE hPrevInstance, //Win16留下的废物 LPSTR lpCmdLine, //命令行参数 int nCmdShow //主窗口初始

网站SEO简单就是最好的优化策略

在互联网高度发达的今天,建个网站已经不是什么新奇之事,也不是很难的事儿,和传统行业一样,营销推广才是重中之重,也是一个不断让自己产品销售出去的重头戏.可以说,任何一种产品,在没有进行推广营销的情况下,是很难让消费者知道,更别说让其产生购买需求了.实体如此,网络也是如此,在网络营销领域,SEO是一种可以从搜索引擎免费获得一定的精准用户群的技术手段,而中国中小企业众多,众多的网站只是一种名片的作用,并没有起到营销的作用,而SEO就是一种帮网站推广出去的手段.不过国内众多的SEO从业人员把SEO过于神

spring事务回滚只能配在service层吗。为什么我想在Test中添加事务不能进行回滚呢

问题描述 spring事务回滚只能配在service层吗.为什么我想在Test中添加事务不能进行回滚呢 <tx:advice id="txAdvice2" transaction-manager="txManager"> <tx:attributes> <tx:method name="inserttwo*" propagation="REQUIRED"/> </tx:attribut

架构师-我在设计一个表结构.主键生成策略选择哪种好,有什么讲究吗?

问题描述 我在设计一个表结构.主键生成策略选择哪种好,有什么讲究吗? 选uuid? 还是选数字自增? 一般情况下都用哪个啊? 一般情况下都用哪个啊? 一般情况下都用哪个啊? 解决方案 主键一般都是非业务主键,仅作编号没有实际意义,自增或者UUID都可以的.比较如下: 解决方案二: 数字自增长 一直用的这种,还不错.

异常信息乱码-ssh框架;事务配置在service层,批量插入时违反唯一约束;返回的异常信息中有乱码 如下

问题描述 ssh框架:事务配置在service层,批量插入时违反唯一约束:返回的异常信息中有乱码 如下 org.springframework.dao.DataIntegrityViolationException: Duplicate entry '?-?R' for key 'num'; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException:

算法-求一个高胜率的剪刀石头布的策略

问题描述 求一个高胜率的剪刀石头布的策略 明天课上老师要求写代码比石头剪子布,11次中赢得次数多的获胜.不知道有没有什么比较好的算法推荐一下.谢谢. 解决方案 这个是概率的问题,不可能有"高概率获胜的好算法",你不能违背统计学中基本规律.我在书上也见到过关于这个游戏制胜秘籍,那就是先出剪刀,因为人们最容易出石头,所以你的对手肯定会出布,于是你用剪刀就制胜了.不过这只是利用了人们的心理因素,从本质来讲什么都不是.关于这篇文章,见<青年文摘 (2011年第13期)>-石头剪刀布

ArcGIS API for Silverlight学习笔记

ArcGIS API for Silverlight学习笔记(一):为什么要用Silverlight API(转) 你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我都没关系.但你不能否认3G是一种趋势,最终我们每个人都会 被包裹在3G网络中.1100也不是一成不变,没准哪天为了打击犯罪,会在你的1100上强制装上GPS.GIS工作既然建立在计算机的基础上,当然也得 随着IT行业与时俱进.       看看现在计算机应用的趋势吧.云(计算),这个东西可讲不清楚,因

Red Hat: API层是微服务架构成功的关键

Microservices作为一项在云中部署应用和服务的新技术已成为当下最新的热门话题.但大部分围绕microservices的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点. 企业和服务提供商正在寻找更好的方法将应用程序部署在云环境中,microservices被认为是未来的方向.通过将应用和服务分解成更小的.松散耦合的组件,它们可以更加容易升级和扩展,理论上是这样. 最近一场关于"容器技术和虚拟机是否是实现微服务的最佳技术"的辩论在加州硅谷的OpenSt