我已经将commons-pooling-1.6.jar添加到我的类路径中,并尝试实例化一个StackObjectPool,但每次都会失败:
// Deprecated.
ObjectPool<T> oPool = new StackObjectPool<T>();
// Error: Cannot instantiate the type BasePoolableObjectFactory<T>.
PoolableObjectFactory<T> oFact = new BasePoolableObjectFactory<T>();
ObjectPool<T> oPool = new StackObjectPool<T>(oFact);这是一个完全不推荐使用的API吗?如果是这样的话,有哪些开源方案可以替代Commons Pooling呢?否则,如何实例化StackObjectPool
发布于 2012-06-01 01:43:33
您需要编写自己的工厂,可能会扩展BasePoolableObjectFactory。更多信息请看这里:http://commons.apache.org/pool/examples.html
下面是一个创建StringBuffers的PoolableObjectFactory实现:
import org.apache.commons.pool.BasePoolableObjectFactory;
public class StringBufferFactory extends BasePoolableObjectFactory<StringBuffer> {
// for makeObject we'll simply return a new buffer
public StringBuffer makeObject() {
return new StringBuffer();
}
// when an object is returned to the pool,
// we'll clear it out
public void passivateObject(StringBuffer buf) {
buf.setLength(0);
}
// for all other methods, the no-op
// implementation in BasePoolableObjectFactory
// will suffice
}然后按如下方式使用它:
new StackObjectPool<StringBuffer>(new StringBufferFactory())发布于 2012-06-01 02:02:35
大多数库的输入都集中在对象工厂上。这将告诉池在需要时如何创建新对象。例如,对于一个连接池,所有这些都连接到具有相同配置的相同数据库,如用户、密码、url、驱动程序。
需要创建一个扩展BasePoolableObjectFactory类的具体工厂,并编写makeObject方法,如下例所示。
static class MyObject {
private String config;
public MyObject(String config) {
this.config = config;
}
}
static class MyFactory extends BasePoolableObjectFactory<MyObject> {
public String config;
public MyFactory(String config) {
this.config = config;
}
@Override
public MyObject makeObject() throws Exception {
return new MyObject(config);
}
}
public static void main(String[] args) {
MyFactory factory = new MyFactory("config parameters");
StackObjectPool<MyObject> pool = new StackObjectPool<>(factory);
}Swaranga Sarma编成了一个非常有趣的例子。请在上查看
https://stackoverflow.com/questions/10837713
复制相似问题