CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  框架、开源

想和大家讨论一下设计模式,特别是数据源的资源使用问题

楼主Michael_javavb()2006-05-04 05:09:34 在 Java / 框架、开源 提问

最近在用struts做毕设,  
  一般和数据库操作有关的部分,应该放在哪里做比较好呢,更能体现mvc?  
  事先声明,数据源已经配置好,就用tomcat的数据库连接池。  
   
  我觉得不应该放在action里面做吧,我的想法是把所有要操作数据库的东西都放在一个包下面,  
  比如com.mich.stock.db,然后根据不同的要求,创建不同的对象来返回不同的结果。不知道这样好不好?比如登录验证时,要从数据库中取名字,返回出来和登录名比较。  
   
  还有一个问题就是对于数据源的资源使用问题,首先是比如一个用户,他只要用一个数据库连接就可以完成例如查询,更新等操作,而只要他在一个session中,我就不打算,在给他使用新的连接。而当他一作完对数据库的操作,我就马上释放他的连接。这个一般是怎么实现的?  
   
  第二个很重要的问题就是,比如有两个以上用户,同时要对数据库进行操作,但我要保证每次同时只有一个人能对数据库进行操作,也就是一个人必须等到另一个人对数据库操作完毕,才可以操作。也就类似于锁的问题,有什么好的解决方法? 问题点数:100、回复次数:4Top

1 楼Michael_javavb()回复于 2006-05-04 05:14:10 得分 0

对了,我觉得有点矛盾的问题,一方面都说数据库的资源很宝贵,用完了就要马上释放,而另一方面说,数据库的连接创建很耗资源,因此要尽可能少的创建连接,多利用现有连接。那这个数据库连接池是怎么解决这个问题的呢?Top

2 楼cyfnjtu(迎风)回复于 2006-05-04 06:20:16 得分 50

连接池的实现,借助了同步、共享机制。  
   
   
  一般来说。连接池中的连接数目是固定的,这个称为连接池的大小。就我所知,连接池的初始化包括两种情况:  
  1、在系统初始化的时候将所有的连接一次性建立好,再作为资源统一分配给客户使用;  
  2、在客户申请连接的时候从池中检索可用连接,若无且池中连接数小于连接池大小,则初始化一条新的连接给客户使用。  
   
  对于某些高性能连接池来说,还有为了适应客户压力变化的策略,可以动态调整连接池的大小。  
   
   
  Top

3 楼Saro(这也不是江水,这是二十年流不尽的英雄血。)回复于 2006-05-04 10:15:56 得分 50

1.借助ThreadLocal在当前线程以dataSource为key,bind一个Connection.每次从ThreadLocal里面取,具体实现你可以去看Spring的TransactionSynchronizationManager和DataSourceUtils这2个类。  
  2.如果是指长事务的话,给表加一个version字段,在程序里面管理,提交表数据时判断。Top

4 楼Michael_javavb()回复于 2006-05-04 16:04:54 得分 0

谢谢两位回答,据说sql2k本身就带有并发访问的机制,不过我用的是mysql,不知道有没有类似的方法,看了,好多,好像都比较麻烦的。  
   
  我还是比较倾向于,以前做存储过程时的经验,用事务的方法来控制,不过这只能写在存储过程中,不知道程序中要写会不会很麻烦Top

相关问题

关键词

得分解答快速导航

  • 帖主:Michael_javavb
  • cyfnjtu
  • Saro

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo