Java理论与实践: 理解JTS —— 事件简介[Java编程]
本文“Java理论与实践: 理解JTS —— 事件简介[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Java Transaction Service 是 J2EE 架构的关键元素.它与 Java Transaction API 结合在一同,使我们可以构建关于各种系统和网络弊端都非常 结实的分布式利用程序.事件是坚固利用程序的基本构建块 —— 假如没有事件 的支持,编写坚固的分布式利用程序将是非常艰难的.幸运的是,JTS 履行的大 部份工作关于程序员都是透明的;J2EE 容器使事件划分和资源征用对程序员来 说几近是不可见的.这个由三个部份构成的系列文章的第一期报告了一些底子知 识,包含什么是事件,以及事件关于构建坚固的分布式利用程序来说至关重要的 缘由.
假如您阅读过任何有关 J2EE 的介绍性文章大概书籍,那么就会发现,只有 一小部份资料是专门针对 Java Transaction Service(JTS)或 Java Transaction API(JTA)的.这并非因为 JTS 是 J2EE 中不重要的部份大概 可选部份 —— 恰好相反.JTS 遭到的关注之所以会比 EJB 技术少,是因为它 为利用程序供应的服务非常透明 —— 很多开辟人员乃至没有注意到在他们的应 用程序中事件在那边开始和完毕.在某种意义上,JTS 的默默无闻恰好是它的成 功:因为它非常有效地躲藏了事件管理的很多细节,因此,我们没有据说过大概 评论过很多关于它的内容.但是,您大概想理解它在幕后都为您履行什么功效.
毫不浮夸地说,没有事件就不能编写坚固的分布式利用程序.事件答应采取 某种掌握方法改正利用程序的长期性状况,以便使利用程序关于各种各样的系统 弊端(包含系统崩溃、网络弊端、电源弊端乃至自然灾难)越发结实.事件是构 建容错、高坚固性以及高可用性利用程序所需的基本构建块之一.
事件的动机
假定您正在从一个账户向另一个账户举行转账个账户差额由数据库表中的某 一行来表示.假如您想从账户 A 转账到账户 B,则大概履行以下这些 SQL 代码 :
SELECT accountBalance INTO aBalance
FROM Accounts WHERE accountId=aId;
IF (aBalance >= transferAmount) THEN
UPDATE Accounts
SET accountBalance = accountBalance - transferAmount
WHERE accountId = aId;
UPDATE Accounts
SET accountBalance = accountBalance + transferAmount
WHERE accountId = bId;
INSERT INTO AccountJournal (accountId, amount)
VALUES (aId, -transferAmount);
INSERT INTO AccountJournal (accountId, amount)
VALUES (bId, transferAmount);
else
FAIL "Insufficient funds in account";
END if
到目前为止,这段代码看起来非常简单易懂.假如手头的资金充沛,则从一 个账户中减去资金,并增添到另一个账户中.但是,假如呈现系统电源弊端大概 崩溃,又会发生什么情形呢?表示账户 A 和账户 B 的行大概不会存储在同一个 磁盘块中,这意味着要完成转账需求举行多个磁盘 IO.假如在已写入第一个磁 盘块之后,在写入第二个磁盘块之前,系统发生弊端,又会发生什么情形呢?A 账户中的资金已经划走,但是没有呈目前账户 B 中(A 和 B 客户都不会乐意) ,大概资金将呈目前账户 B 中,但是没有记入账户 A 的借出账中(银行不会愿 意).假如账户已精确更新,而账户日记账没有更新,又会发生什么情形呢?那 么账户 A 和账户 B 的每月银行结账单将与它们账户的余额不一致.
不但不大概同时将多个数据块写入磁盘,并且每当举行改正时即刻将每个数 据块写入磁盘,也对系统性能有不利影响.将磁盘写入耽误到对比适合的时间可 能会大大改进利用程序的吞吐量,但是,需求采取不侵害数据完好性的方法履行 .
乃至在系统没有发生弊端时,上面谈论的代码还有另一种风险 —— 并发性 .假如账户 A 中有 100 美圆,但是却同时开始向它的两个差别的账户辨别转账 100 美圆,那么会发生什么情形呢?假如时间上刚巧,并且没有得当的锁定机制 ,两次转账都大概成功,从而使账户 A 的余额为负值.
这些情形仿佛都是非常大概发生的,因此但愿企业数据系统可以办理这些问 题是理所该当的.我们但愿在发生火灾、大水、电源弊端、磁盘以及系统呈现故 障时,银行都可以保持精确的账户记录.可以通过冗余(冗余的磁盘、计算机以 及数据中央)来供应容错,但是事件 使得构建容错的软件利用程序成为大概. 事件供应了一个框架,用于在系统或组件发生弊端时保持数据一致性和完好性.
以上是“Java理论与实践: 理解JTS —— 事件简介[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |