2012-11-14 3 views
1

아파치 공유 풀을 사용하여 '객체'풀을 생성하려고합니다. 문자열 형식의 인수를 사용하고 올바른 형식의 개체를 만드는 개체 팩토리가 이미 있으므로이 팩토리를 사용하고 싶습니다.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); 
     ... 
    } 

를 또는, 이 복제를 위해서 여러 팩토리 클래스를 복제/생성하는 대신에?

답변

2

여러분은 KeyedObjectPool<K,V> 인터페이스를 읽어야합니다.이 인터페이스는 또한 commons-pool에서도 볼 수 있습니다. 자바 독에서

: 그런 다음 key 매개 변수를 기반으로 인스턴스를 만들기 위해 KeyedPoolableObjectFactory<K,V>을 구현할 수

A keyed pool pools instances of multiple types. Each type may be accessed using an arbitrary key. 

, 그것은 당신이 찾고있는 makeObject(K key) 기능을 가지고 있습니다.

추신 : 귀하의 질문에 대한 답변을 "수락 됨"으로 표시하지 않은 것 같습니다.

+0

어떻게 keyPool에 대한 매개 변수를 설정 했습니까? 예 : http://commons.apache.org/proper/commons-pool/api-1.2/org/apache/commons/pool/impl/GenericKeyedObjectPoolFactory.html – neoeahit

+1

@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