代码改变世界

关于数据访问模式(八)—— Resource Pool模式

2005-08-12 12:01 FantasySoft 阅读(...) 评论(...) 编辑 收藏

        Resource Pool(资源池)模式已经在上一篇Post中露过脸了,这次让我们再对其看个仔细吧。Resource Pool模式是在应用程序开发中十分常见的一种模式,如果你使用过任何一个主流的应用服务器,如Tomcat,Weblogic,Websphere,Resin等等,对连接池(Connection Pool)的配置一定都不会陌生。我们从几乎无处不在的连接池就可以知道Resource Pool模式的普遍性了。对于Connection这样资源,初始化的开销是很大的,因为建立连接必须进行Socket连接,验证以及授权等繁杂的操作,代价是昂贵的,因此及早初始化一定量打开的连接,并且缓存起来是一个相当不错的策略。以下是Resource Pool的静态结构图:       

resourcepool.gif

        使用Resource Pool模式应该注意以下几点:
        1.尽管你可以使用on demand(窃用了IBM的Buzz word,真不好意思,嘻嘻)的方式来初始化资源,但你还是应该在demand还没有到来之
前为资源的使用者作好准备;
        2.在资源吃紧的时候就开始往资源池中增加新的资源,而不是等到口渴了才开始挖井。同时,资源的增加并非简单的一一对应——发现一个
资源请求无法响应就创建一个新的资源,应该遵循一定的策略。想想ArrayList,Vector中Capacity增加的策略,你或许会得到新的启示;
        3.既然资源放在一个池中,池的大小就不能够无限地扩大,应该为资源池设定一个上限。当资源池达到上限的时候,就需要阻塞甚至阻
止新的资源请求直至有正在使用的资源释放至资源池中。
        4.设置资源的timeout。资源是宝贵的,而且是共享的。当应用程序占着茅坑不拉屎的时候,就应该将资源进行回收。这个时候,资源定
时器就会派上用场了。

        事实上,我们一般都不会自己去实现资源池,因为已经有很多成熟的产品可供选择了,如DBCP。但是正如侯捷先生说过的,当你了解飞机的结构之后即使不会去制造飞机,但是至少去看航展的时候会觉得更过瘾。

[1] 参考书籍:《数据访问模式——面向对象应用中的数据库交互》