想和大家讨论一下设计模式,特别是数据源的资源使用问题
最近在用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




