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

Michael_javavb 2006-05-04 05:09:34
最近在用struts做毕设,
一般和数据库操作有关的部分,应该放在哪里做比较好呢,更能体现mvc?
事先声明,数据源已经配置好,就用tomcat的数据库连接池。

我觉得不应该放在action里面做吧,我的想法是把所有要操作数据库的东西都放在一个包下面,
比如com.mich.stock.db,然后根据不同的要求,创建不同的对象来返回不同的结果。不知道这样好不好?比如登录验证时,要从数据库中取名字,返回出来和登录名比较。

还有一个问题就是对于数据源的资源使用问题,首先是比如一个用户,他只要用一个数据库连接就可以完成例如查询,更新等操作,而只要他在一个session中,我就不打算,在给他使用新的连接。而当他一作完对数据库的操作,我就马上释放他的连接。这个一般是怎么实现的?

第二个很重要的问题就是,比如有两个以上用户,同时要对数据库进行操作,但我要保证每次同时只有一个人能对数据库进行操作,也就是一个人必须等到另一个人对数据库操作完毕,才可以操作。也就类似于锁的问题,有什么好的解决方法?
...全文
119 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saro 2006-05-04
  • 打赏
  • 举报
回复
1.借助ThreadLocal在当前线程以dataSource为key,bind一个Connection.每次从ThreadLocal里面取,具体实现你可以去看Spring的TransactionSynchronizationManager和DataSourceUtils这2个类。
2.如果是指长事务的话,给表加一个version字段,在程序里面管理,提交表数据时判断。
cuiyingfeng 2006-05-04
  • 打赏
  • 举报
回复
连接池的实现,借助了同步、共享机制。


一般来说。连接池中的连接数目是固定的,这个称为连接池的大小。就我所知,连接池的初始化包括两种情况:
1、在系统初始化的时候将所有的连接一次性建立好,再作为资源统一分配给客户使用;
2、在客户申请连接的时候从池中检索可用连接,若无且池中连接数小于连接池大小,则初始化一条新的连接给客户使用。

对于某些高性能连接池来说,还有为了适应客户压力变化的策略,可以动态调整连接池的大小。


Michael_javavb 2006-05-04
  • 打赏
  • 举报
回复
对了,我觉得有点矛盾的问题,一方面都说数据库的资源很宝贵,用完了就要马上释放,而另一方面说,数据库的连接创建很耗资源,因此要尽可能少的创建连接,多利用现有连接。那这个数据库连接池是怎么解决这个问题的呢?
Michael_javavb 2006-05-04
  • 打赏
  • 举报
回复
谢谢两位回答,据说sql2k本身就带有并发访问的机制,不过我用的是mysql,不知道有没有类似的方法,看了,好多,好像都比较麻烦的。

我还是比较倾向于,以前做存储过程时的经验,用事务的方法来控制,不过这只能写在存储过程中,不知道程序中要写会不会很麻烦

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧