论文部分内容阅读
摘要:本文使用面向对象技术对Hiberante乐观锁的version实现机制进行轻量级封装,并且结合spring框架,构建出一种信息系统开发模型,使开发更加简单,提高了开发效率。
关键词:hibernate ;version;并发;乐观锁;Stale Object State Exception
中图分类号:TP311 文献标识码:A DoI: 10.3969/j.issn.1003-6970.2012.04.023
A Development Model of the Information Systems Based on the Hebernate’s Optimistic lock
【Abstract】this article package lightweightly the optimistic lock mechanism of the version of hiberante using the object-oriented technology, combined with spring framework and to build an development model of information system, it make development easier, and improve the development efficiency.
【Key words】Hibernate; version; Concurrent; optimistic Lock ;Stale object State exception
0 引言
并发控制是指在多用户的环境下, 对应用系统并发操作时进行规范的机制, 目的是避免数据的丢失修改、 读脏数据与不可重复读等, 以保证数据的正确性与一致性[1]。并发控制在多用户的模式下是十分重要的, 但这一点经常被一些数据库开发程序人员所忽视。
并发带来的问题的解决办法有很多,大致分为悲观锁和乐观锁,悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受;相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制,乐观锁使用版本、校验和、散列值以及数据库特殊方式,如Oracle 的ORA_ROWSCN或SQL Server的timestamp等等[2]。
乐观锁的工作原理是读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。
其中version的解决办法使用最广,但是使用version,会使每一个实体类中多出一个与业务无关的字段version,并且使jdbc代码变得复杂。因此本文把version字段抽象到所有实体
本开发模型采用经典的三层架构,Web层、业务逻辑层和持久层。为简化问题,本处不涉及Web层,但为了测试,添加了测试类。模型中各层调用关系如图3所示,各个层次、各个类之间的依赖关系由spring管理,为了突出层次关系,类图中进行了简化。
数据访问对象基于CommonDao,CommonDao中的getSession方法可以获取当前的Hiberante的Session,进而进行数据的CURD操作,具体结构如图2所示。
关键词:hibernate ;version;并发;乐观锁;Stale Object State Exception
中图分类号:TP311 文献标识码:A DoI: 10.3969/j.issn.1003-6970.2012.04.023
A Development Model of the Information Systems Based on the Hebernate’s Optimistic lock
【Abstract】this article package lightweightly the optimistic lock mechanism of the version of hiberante using the object-oriented technology, combined with spring framework and to build an development model of information system, it make development easier, and improve the development efficiency.
【Key words】Hibernate; version; Concurrent; optimistic Lock ;Stale object State exception
0 引言
并发控制是指在多用户的环境下, 对应用系统并发操作时进行规范的机制, 目的是避免数据的丢失修改、 读脏数据与不可重复读等, 以保证数据的正确性与一致性[1]。并发控制在多用户的模式下是十分重要的, 但这一点经常被一些数据库开发程序人员所忽视。
并发带来的问题的解决办法有很多,大致分为悲观锁和乐观锁,悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受;相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制,乐观锁使用版本、校验和、散列值以及数据库特殊方式,如Oracle 的ORA_ROWSCN或SQL Server的timestamp等等[2]。
乐观锁的工作原理是读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。
其中version的解决办法使用最广,但是使用version,会使每一个实体类中多出一个与业务无关的字段version,并且使jdbc代码变得复杂。因此本文把version字段抽象到所有实体
本开发模型采用经典的三层架构,Web层、业务逻辑层和持久层。为简化问题,本处不涉及Web层,但为了测试,添加了测试类。模型中各层调用关系如图3所示,各个层次、各个类之间的依赖关系由spring管理,为了突出层次关系,类图中进行了简化。
数据访问对象基于CommonDao,CommonDao中的getSession方法可以获取当前的Hiberante的Session,进而进行数据的CURD操作,具体结构如图2所示。