zoukankan      html  css  js  c++  java
  • web并发访问的问题

    一般的webapplication,可能会遇到这样的问题,你可以这样模拟:用浏览器开一个窗口,选中一条记录,编辑之,但是先不要保存,新开一个浏览器窗口,找到这条记录,删除之,然后再回到第一个窗口点击保存按钮。
     
    假如程序没有做特别的处理,肯定会报错。这个问题,有些公司并不考虑这样的问题,认为这个发生的概率很低,报错就报错吧,反正概率很低。 
     
    是这样的,假如是一般的小的系统,访问人数和并发数不是很多的时候,基本上不太用考虑。但是一个大的,比如说海关,银行,或者在线电子商务网站,基于系统健壮性考虑,你不得不考虑。。。
     
    目前一个通用的做法有两种:
     
    锁机制:1.悲观锁;2.乐观锁。
     
    在web程序里,基本上不能考虑悲观锁(会使得系统的产生不可估量额性能损失,也失去了web 的意义了。)
     
    当然在web程序里只能乐观锁,一个通用的做法就是每张表里设置一个字段version_no,每次删除或者修改的时候,去数据库比较一下,数据库的version_no还变化了,假如不等了,就说明在你之前发生过了变化了,这次修改或者删除动作不能成功。。。
     
    由于系统初期没有考虑到,到了后来用户测试的时候,出现了这样的问题,在的baseDao里做了一次检查,如果不对劲就throw一个exception,在basicDao里使用了模版技巧用来保证dao和service层不用改变方法的申明,保证了这个改变影响的代码降到了最低。
     
    但是这里有一个问题,假如是使用hibernate3技术,假如你update的时候,由于特殊的情况,你得使用merge(bo)方法---否则你会遇到adifferent Object with same indicator in asession,那样就会带来一个新的问题,假如你不做一点处理,hibernate发现你的这条记录已经删除了,他会automagicllycreate一条新的记录到数据库里。




    本文件由博客备份工具BlogDown自动生成,试用版不能导出全部文章。请注册:http://shop36841370.taobao.com/ 九丁软件
    好男儿胸怀向大海。
  • 相关阅读:
    某开源ERP最新版SQL与RCE的审计过程
    QEMU固件模拟技术-stm32仿真分析及IRQ仿真实践
    QEMU固件模拟技术分析-luaqemu实现分析
    C/C++源码扫描系列- Fortify 篇
    C/C++源码扫描系列- Joern 篇
    C/C++源码扫描系列- codeql 篇
    bluetooth_stack开源蓝牙协议栈源码分析与漏洞挖掘
    DA14531芯片固件逆向系列(4)- L2CAP及ATT层收包再分析
    DA14531芯片固件逆向系列(3)- BLE收包流程分析及漏洞挖掘思路分享
    微服务架构简单搭建——Spring Cloud Eureka、Ribbon实现服务治理与服务消费
  • 原文地址:https://www.cnblogs.com/supertang/p/4096279.html
Copyright © 2011-2022 走看看