快速业务通道

用JOTM向Servlet中添加事务 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

用JOTM向Servlet中添加事务

时间:2011-07-08 csdn博客 newhappy

J2EE 除了提供了 servlet 之外,还提供了大量的其它功能。Servlet 开发者 们也许难得使用这些功能,不情愿也没有时间用一个超出所需的大型 J2EE 服务 器来替换自己的简单的 servlet。然而,依据J2EE 的模块化特征,有可能将负责 特定 J2EE 功能的小组件整合到 servlet 容器里,以此来增强 WEB 应用程序。 其中之一就是事务。有关 J2EE 事务的完整描述,您可以参考Onjava上的其他三 篇文章,现在只需知道事务是资源的操作步骤(例如:数据库),它由四个属性定义 ,这四个属性根据其首字母浓缩为 ACID:

原子性:事务的操作,或者是全部成功(此时提交事务),或者是全部不成功(此时 回滚事务),谓之为 all-or-nothing 属性。一个事务应该被视为单个工作单元, 在一个事务里面绝对不可能同时存在完成了的和没有完成的操作。

一致性:完成了的事务将资源从一个有效状态转变为另一个有效状态。一致性 的具体例子有:数据库的参照完整性和表中的主键唯一性。

独立性在事务没有提交之前,事务作用的共享资源的改变在事务之外是不可见 的。独立性确保了不同事务不会同时访问正在更新的数据。

持久性:由事务提交的改变会永久存在。

JOTM (Java Open Transaction Manager)是由ObjectWeb协会开发的功能完整 的且资源开放的独立的事务管理器。它提供了 JAVA 应用程序的事务支持,而且 与 JTA( JAVA 事务 API)兼容。您可以在JOTM home page了解到更多的详细信 息。在 TOMCAT(或其它 Servlet 容器)整合了 JOTM 后,JSP 和 servlet 的开 发者们就可以获得事务的优势轻而易举的创建更多健壮的 web 应用程序。

为了突出事务是怎样增强 web 应用程序的,举一个常用的例子, web 浏览器 与客户端交互的 ATM 。

ATM 样例:

情景

此例比较简单:一个客户想从 ATM 提款,输入了他的客户名称,john_doe; 想提款数,$50。如果他的银行帐户上有足够的钱并且在 ATM 机上有足够的现金 的话,应用程序就能给他相当数目的现金,并从银行帐户上提出同样的数目。否 则,操作中断,并且除出现错误信息之外,其他都不会改变。我们无需担心安全 问题,只是在猜想用户是否正确授权。

这是一个非常简单的例子,但是如果不使用事务,用别的方法执行起来将会很 难。客户端操作将会涉及到两个不同的资源:ATM 和客户银行帐号。它们会自动 的在应用程序设计中产生 ACID 问题。例如:如果在 ATM 上操作成功而在银行帐 户上却失败(也许是因为交流失败),客户将会取到钱,但是他的帐户将不会更 新。对于银行来说,这就亏大了。更糟的是,如果银行帐户更新了,但是由于一 个错误阻止 ATM 传送钱,客户得不到现金,但是帐户上却提掉了这笔款。

为了防止出现上述事故,在你的应用程序里,你能够 1) 联系两个资源,并 告知两者客户执行的所有当前操作,2) 询问两者是否能执行操作,3)如果两者 都同意,则请求操作。即使这样,此方法也不能谓之足够健壮,因为,如果客户 帐户上的钱在第二步和第三步的时候被另外一操作提走,提款可能会失败,例如 ,客户帐户不能出现逆差。

事务能使应用程序更简单更健壮的之处就是:在同一事务的两个资源上执行所 有的操作的时候,它将会解决 ACID 的问题(尤其是原子性)。

用JOTM向Servlet中添加事务(2)

时间:2011-07-08 csdn博客 newhappy

应用程序设计

数据层:在数据层,有两个不同的数据库,并各自有一张表。为了使例子更接 近实际,我们使用两个不同的数据库,因为有可能从 ATM 提走不是属于该客户帐 户的款(请参见下文配置数据库)。

banktest 包含代表客户帐号的 account 表。

atmtest包含代表 ATM 的 atm 表。

逻辑层:在逻辑层,有三个类来

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号