<b>Java理论和实践: 理解JTS ― 均衡安全性和性能</b>[Java编程]
本文“<b>Java理论和实践: 理解JTS ― 均衡安全性和性能</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在他的关于 JTS 的系列文章的第 1 和第 2 部份,Brian 报告了一些底子知识,包含什么是事件以及 J2EE 容器若何使事件服务对 EJB 组件透明.固然可以以声明的方法而不是编程的方法指定组件的事件性语义可以大大加强配置企业利用程序时的机动性,但在装配利用程序时做出不当的决领悟削弱利用程序的性能和安定性.在这最后一部份,Brian 谈论了 J2EE 供应的用来管理事件划分和断绝的工具和一些高效率地利用这些工具的指导.请单击文章顶部或底部的 谈论,在 谈论论坛与作者和其他读者分享您对本文的设法.
在本系列的第 1 部份(“ An introduction to transactions”)和第 2 部份(“ The magic beind the scenes”)中,我们定义了什么是事件,摆列了事件的基本特点(property),并探究了 Java 事件服务(Java Transaction Service)和 J2EE 容器若何合作为事件供应对 J2EE 组件的透明支持.在本文中,我们将谈论事件的划分和断绝这个主题.
为 EJB 组件定义事件划分和断绝属性(attribute)的职责由利用程序装配人员来承当.假如这些属性设置不当,会对利用程序的性能、可伸缩性或容错本领造成严重的后果.不幸的是,并没有一种必须服从的法则用于精确设置这些属性,但有一些指导可以帮忙我们在并发危险和性能危险之间找到一种均衡.
我们在第 1 部份中谈论过,事件主如果一种非常处理机制.事件在程序中的用处与合理条约在平常业务中的用处类似:假如出了什么问题它们可以帮忙恢复.但由于大大都时间内都没实际 发生什么错误,我们就但愿可以尽大概削减它们的开销以及对别的时间的占用.我们在利用程序中若何利用事件会对利用程序的性能和可伸缩性产生很大的影响.
事件划分
J2EE 容器供应了两种机制用来定义事件的起点和终点:bean 管理的事件和容器管理的事件.在 bean 管理的事件中,用 UserTransaction.begin() 和 UserTransaction.commit() 在 bean 办法中显式开始和完毕一个事件.另一方面,容器管理的事件供应了更多的机动性.通过在装配描写符中为每个 EJB 办法定义事件性属性,您可以指定每个办法的事件性需求并让容器肯定什么时刻开始和完毕一个事件.无论在哪类情形下,构建事件的基本指导方针都是一样的.
进来,出去
事件划分的第一条法则是“尽大概短小”.事件供应并发掌握;这普通意味着资源管理器将代表您得到您在事件期间拜候的数据项的锁,并且它必须一向持有这些锁,直到事件完毕.(请回想一下本系列第 1 部份所谈论的 ACID特点,此中“ACID”的“I”代表“断绝”(Isolation).也就是说,一个事件的后果影响不到与该事件并发履行的别的事件.)当您拥有锁时,任何需求拜候您锁定的数据项的别的事件将不得不一向等候,直到您释放锁.假如您的事件很长,那些别的的全部事件都将被锁定,您的利用程序吞吐量将大幅度下降.
法则 1:使事件尽大概短小.
通过使事件尽大概短小,您可以把阻碍别的事件的时间缩到最短,从而提高利用程序的可伸缩性.保持事件尽大概短小的最好办法当然是不在事件中间做任何不必要耗费时间的事,分外是不要在事件中间等候用户输入.
开始一个事件,从数据库检索一些数据,显示数据,然后在仍处于事件中时请用户做出一个挑选大概对比诱人.千万别这么做!即便用户注意力集合,也要耗费数秒来呼应 ― 而在数据库中拥有锁数秒的时间已经是很长的了.假如用户决意脱离计算机,大概是去吃午饭大概乃至回家一天,会发生什么情形?利用程序将只好无奈停机.在事件期间履行 I/O 是招致灾难的诀窍.
法则 2:在事件期间不要等候用户输入.
将相关的操作归在一同
由于每个事件都有不小的开销,您大概认为最好是在单个事件中履行尽大概多的操作以使每个操作的开销到达最小.但法则 1 奉告我们长事件对可伸缩性不利.那么若何实现最小化每个操作的开销和可伸缩性之间的均衡呢?
我们把法则 1 设置为逻辑上的极度 ― 每个事件一个操作 ― 这样不但会招致额外开销,还会危及利用程序状况的一致性.假定事件性资源管理器保护利用程序状况的一致性(请回想一下第 1 部份,此中“ACID”的“C”代表“一致性”(Consistency)),但它们依靠利用程序来定义一致性的意思.实际上,我们在描写事件时利用的一致性的定义有点圆滑:利用程序说一致性是什么意思它就是什么意思.利用程序把几组利用程序状况的改变组织到几个事件中,后果利用程序的状况就成了 定义上的(by definition)一致.然后资源管理器确保假如它必须从弊端恢复的话,就把利用程序状况恢复到近来的一致状况.
在第 1 部份中,我们给出了一个在银行利用程序中将资金从一个帐户转移到另一个帐户的示例.清单 1 展示了这个示例大概的 SQL 实现,它包含 5 个 SQL 操作(一个挑选,两个更新和两个插入操作):
以上是“<b>Java理论和实践: 理解JTS ― 均衡安全性和性能</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |