我使用的Apache共享池库维修器材couchbase连接池(可以看作是任何类型的连接,其实并不重要)。
我现在面临的问题是,我找到对象返回到池中的唯一途径是通过调用从GenericObjectPool类返回object的方法来做到这一点编程。 这迫使以保证一旦从池借用的对象在应用程序中的回报,无论任何异常或意外的行为的应用程序。
即使我控制对象在整个应用程序池的回报,我觉得有风险的完全依赖程序员返回的对象。 有谁知道一种方法来自动返回一旦超过了规定的超时对象(回收的对象)。 这也将工作的任何方式,使池中创建新的对象,一旦超过了借来的对象超时。
PS:我的应用程序公开了一组REST Web服务,连接到分布式内存缓存服务器(Couchbase)。 池创建了一套Couchbase连接。
任何建议将帮助!
编辑
我已经尝试的第一个解决方案是创建一个新类(CouchbaseClientHandler)含有从存储在池(CouchbaseClient)的对象的类型的连接对象。 我实现了对CouchbaseClientHandler finalize方法,确保相关联的实际返回到池中,如果此对象的引用渐渐由一个意外的异常丢失。 当垃圾回收器销毁对象的对象将被返回。 如预期这并没有奏效。 是无法预测在垃圾收集器将到达一个回收对象,并且它通常采取高于所需的时间。
其实我已经工作,现在的解决方案是一个有点不同,但有很多更安全。 由于我的泳池旨在通过Web服务一起使用,因为每一个Web服务在一个单独的和唯一的线程(我使用的是新泽西州在Tomcat)正在运行,我决定使用映射唯一主题标识的静态HashMap中的变量到CouchbaseClient对象的列表创建从web服务的执行池借用。 由于我的网络服务以这样的方式,不管发生什么事而设计的一种处理方法返回之前将处理最后的输出,我可以肯定始终运行,返回到池中那些借来的对象(连接)的方法,即没有得到有效返回到池中。
虽然这个工作相当好对我来说,我真的想知道是否有自称或尚未返回超时借来的对象抹的更好的方法。