快速业务通道

J2EE中的业务逻辑和数据库访问决策说明 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
使用完全的孤立事务方式,那么同时执行2个事务的结果和一个接一个的执行是一样的。(也就是说,如果你用孤立事务的方式来访问数据库的话,你同时执行2个事务,就会变成一个接一个的串行执行了。)

这种方法也许听起来非常的简单,但问题是这种处理方式有时候会降低性能,因为如何实现对事务的孤立是由数据库来决定的。为了这个原因,许多应用程序都避免使用它,而采用optimistic或者pessimistic 所锁,这会在下面讲到。

J2EE中的业务逻辑和数据库访问决策说明(5)

时间:2011-04-30

开放式锁定

并行更新数据的一种途径是用开放式锁定。开放式锁定工作原理是通过应用程序来检查数据是否被更新(被其他事务修改造成的)而实现的。一种更普通的实现开放式锁定的方法是在每个表中添加一个“版本列”(version column),对每个表而言,程序每次改变其中一行的时候都会更新这个“版本列”。每个UPDATE语句中的WHERE语句会根据上次查询的结果判断这个版本号是不是被更改了。在事务访问数据库中的数据时,程序中可以用PreparedStatement.executeUpadte()这个函数的返回值来检查行的个数,从而判断是否要继续执行UPDATE语句。如果数据中的行已经被其他的事务更新或者删除了,那么程序会让该事务从新访问数据库。

用开放式锁定机制来锁定那些直接执行SQL语句的应用程序是非常简单的。但是,用持久层构架(比如JDO和Hibernate)实现更容易,因为他们已经提供了开放式锁定机制――在配置选项中。一旦在配置选项中,选中了这种方式,持久层构架会自动的生成SQL的UPDATE语句来完成版本检查的任务。开放式锁定的名字来源于一种假设的情况,在这种情况下:并发更新的机会非常少,而且程序只能检测、覆盖这些数据而不能防止这种事情的发生。另外一种可选的途径是用保守式锁定,使用他的假设条件是:并发更新肯定会发生,而且必须被禁止。

保守式锁定

对于开放式锁定来说,另外一种途径是使用保守式锁定。当一个事务读取某些行的数据时,他会对这些数据加锁,这样就防止其他的事务访问这些数据了。具体的实现是需要数据库支持的,然而不幸的是,不是所有的数据库都支持保守式锁定。如果你的数据库支持话,那么你的应用程序直接执行SQL语句来实现保守式锁定将非常容易。但是,可能你已经猜到了,在程序中用JDO或者Hibernate来实现保守式锁定更容易,JDO以配置选项的方式提供了保守式锁定,而Hibernage提供了简单的API实现锁定对象。

除了可以处理单个数据库事务并行问题,常常你还需要处理多数据库事务的并行问题。

决策5:在长事务下处理并发访问

独立事务、开放式锁定、和保守式锁定只能用在单个数据库事务上的,然而,许多的程序需要 长时间的 在多个数据库事务之间 读取或者更新 共享数据。比如,有一种情况描述的是 怎样实现 用户编辑命令,这和很多的进程有关,这些进程可能会运行 很长的时间,而且它由 多个数据库事务组成。因为数据可能会被 一个数据库事务 读取,而又被 另外一个数据库事务 修改了,那么程序必须对 共享数据的并发访问 进行不同的处理。这样就必须使用 开放式锁定设计模式或 者保守是锁定设计模式,关于这两种模式会在Fowler的 Patterns of Enterprise Application Architecutre中详细介绍。

开放式脱机锁定

模式一种选择是开放式锁定机制的扩展,它会从第一次读取数据开始,在编辑进程执行后检查数据是否已经被修改了。例如,你可以在数据库的共享数据的表中使用版本号来实现。在编辑进程开始的时候,程序将版本号存储到会话状态中,然后每次用户要存储数据时,应用程序都要进行检查,保证数据库中的版本号和会话状态中的版本号一致。

因为开放式脱机锁定模式只有在用户进行保存修改过的数据

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号