apachecommonspoolを使用して「オブジェクト」のプールを作成しようとしています。文字列型の引数を取り、正しい型のオブジェクトを作成するオブジェクトファクトリがすでにあるので、このファクトリを使用したいと思います。
しかし、問題は、汎用プールオブジェクトのシグネチャのいずれも、引数を取るファクトリを渡すことができないことです。
//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()メソッドはありません。
これを行う唯一の方法は、オブジェクトのタイプごとに複数のファクトリクラスを記述し、次のようなif-elseのものを記述することだと思われます。
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);
...
}
または、この目的のためだけにいくつかのファクトリクラスを複製/作成する代わりに、エレガントな方法はありますか?