数据库连接并不是池管理方式的唯一资源。对于那些初始化要付出昂贵代价的资源(例如,套接字和线程)来说,池管理方式可以获得显著的性能好处。因为用池管理资源(而不是数据库连接)有很多好处,所以,这里讨论的池连接是用一个基类实现的,它可以集中控制任何类型的对象以及数据库连接类的扩展。
GetResource通过调用getFirstAvailableResource从可用资源表中获取资源。如果资源可用,getFirstAvailableResource将用abstract isResourceValid方法检查资源的有效性。资源是否有效取决于资源的类型。例如,如果在某段时间内没有使用数据库连接,该连接就会过期。如果某个资源无效,就从可用资源表中清除掉它,getFirstAvailableResource就重新调用自己,搜索有效资源。如果没有可用资源,getResource就创建一个,将它加入到正在使用的资源列表中,并返回它。