我正在嘗試使用apache commons pool來創建一個「對象」池。由於我已經有了一個對象工廠,它需要一個字符串類型參數並創建一個正確類型的對象,我想使用這個工廠。apache commons pool - 如何使用帶參數的工廠
但問題是沒有通用池對象的簽名允許我通過一個帶參數的工廠。
//This is a wrapper class that holds an Object pool
Class INService {
private ObjectPool<INConnection> pool_ = null;
/**
* Constructs an instance of INService, given a pool size
* and a class which implements INHandler interface.
* @param poolSize - size of the service pool
* @param c - the class which handles the INHandler service interface.
*/
public INService(int poolSize, String objectType) {
pool_ = new GenericObjectPool<INConnection>(factory, Objecttype); // won't compile.
}
...
}
的PoolableObjectfactory接口定義像makeObject,destroyObject,validateObject,activateObject和passivateObject方法。但是沒有帶參數的makeObject()方法。
看來,我能做到這一點的唯一方法是編寫多個工廠類,每種類型的對象,寫一個如果其他的東西,如:
public INService(int poolSize, String objectType) {
if (objectType.equals("scap")
pool_ = new GenericObjectPool<INConnection>(scapFactory);
else if (objectType.equals("ucip")
pool_ = new GenericObjectPool<INConnection>(ucipFactory);
...
}
或者,是否有任何優雅的方式,爲此而不是複製/創建幾個工廠類?
你是如何設置keyPool的參數的?像這些: http://commons.apache.org/proper/commons-pool/api-1.2/org/apache/commons/pool/impl/GenericKeyedObjectPoolFactory.html – neoeahit
@neoeahit我不記得我是否使用它其中一個[GenericKeyedObjectPoolFactory]的構造函數(http://commons.apache.org/proper/commons-pool/api-1.2/org/apache/commons/pool/impl/GenericKeyedObjectPoolFactory.html#constructor_summary)或通過[GenericKeyedObjectPool'的構造函數](http://commons.apache.org/proper/commons-pool/api-1.2/org/apache/commons/pool/impl/GenericKeyedObjectPool.html#constructor_summary),你必須嘗試。或者你想知道別的嗎? – JBert