Connection的回收,JavaBean写连接池,请指教,分奉上!
用JavaBean写连接池,测试已成功.
但是碰到问题就是如果在页面中不显式调用free方法(即回收connection),则连接不会自动关闭,不会被放回池中.
请问各位开发的时候,是用一个线程来自动回收连接,还是怎么做,请指点迷津.
问题点数:100、回复次数:16Top
1 楼yaray(雅睿,生活在别处)回复于 2005-06-02 23:07:04 得分 100
在获得数据库连接的方法中返回一个存放有该连接的自定义类,在这个自定义类中重载Object类的finalize()方法,在此方法中将数据库连接放回到你的连接池中。(在你的自定义类超过其生命周期以后,这种方式将依赖GC在什么时候销毁你的自定义类,也就是说有可能不会及时归还数据库连接到池中。)
还有一种方法是运用Java的reflect方式截获Connection的close方法,这样在用户(程序员)调用此连接的close方法时,其实并不是真正的关闭该连接,而是在执行你的重新放到池中的操作。
最好的方式还是这两种方式都采用:既可以在对象销毁前将连接放回到池中,也可以在用户关闭连接时放回池中,而不是真正的关闭它,呵呵Top
2 楼libin53(红尘摆渡)回复于 2005-06-02 23:16:46 得分 0
yaray(雅睿,生活在别处) 研究的很透彻,还有你用连接池,一般应用服务器可以帮你管理连接池中的连接,像websphere,你可以通过控制台来设置这些参数,来管理连接Top
3 楼yaray(雅睿,生活在别处)回复于 2005-06-02 23:22:25 得分 0
TO: libin53()
我只是根据楼主所提的问题作出回答。至于你说的,我也知道----现在一般的容器都已经提供数据库连接池了。
所以也在此建议楼主,不一定要自己实现数据库连接池,用容器提供的池就可以了,而自己所需要做的就是配置一下,这样就可以了。Top
4 楼qingzhuang(半片云)回复于 2005-06-03 08:52:48 得分 0
现在几乎容器都有自己的连接池,配置一下就行,要不用开源 的连接池Top
5 楼dlxu(脱离纯粹Coding阶段)回复于 2005-06-03 09:01:04 得分 0
可以参考下开源连接池的源代码。
用finalize方法作为保险也是不错的选择,在Java.io包里很多情况都是这么做的。不过还是建议自己手工显式调用回收连接代码Top
6 楼china8jie(八戒)回复于 2005-06-03 09:49:42 得分 0
yaray(雅睿,生活在别处) , 可否给出第一种实现的代码示例?
Top
7 楼china8jie(八戒)回复于 2005-06-03 11:09:19 得分 0
用finalize方法又是如何实现呢?
具体代码.
另外,在容器中实现线程要怎么做?Top
8 楼wzy19514(凡事留一线,日后好相见)回复于 2005-06-03 11:36:04 得分 0
upTop
9 楼chuanyuan88(船员-逆水行舟,不进则退!)回复于 2005-06-03 12:03:42 得分 0
finalize()方法是由jvm控制的,在垃圾回收之前先执行对象的finalize()方法,但是因为你永远无法知道什么时候开始垃圾回收。所以我感觉这个是无法预测的。
我也在找最好的办法,:)
Top
10 楼nimifeng(学海无涯.......苦作舟....理解是美!!!Mars.Neil)回复于 2005-06-03 12:40:17 得分 0
学习..Top
11 楼shendiaodaxia(匆匆)回复于 2005-06-03 12:59:23 得分 0
配置Top
12 楼mail25(■游荡在北四环■)回复于 2005-06-03 14:48:21 得分 0
关注Top
13 楼china8jie(八戒)回复于 2005-06-03 18:43:07 得分 0
用finalize方法即是说等虚拟机自己去回收?
还是connection.finalize()?Top
14 楼newste(旭林)回复于 2005-06-03 18:56:41 得分 0
好东西,收了谢谢
Top
15 楼china8jie(八戒)回复于 2005-06-03 21:08:36 得分 0
upTop
16 楼china8jie(八戒)回复于 2005-06-04 14:53:10 得分 0
已经做出一个线程实现监控回收!
Top




