2014-11-12 4 views
2

아파치 커먼즈 풀 2와 함께 객체 P 풀을 만들고 싶습니다. 변수와 메소드로 P 객체를 만듭니다.아파치 커먼즈 풀 2 풀에 객체 추가

나는이 같은 PPool를 만들 : 나는 어떻게 P 개체의 10 경우, 예를 들어, 추가하려는 경우 지금

public class PhantomJsFactory extends BasePooledObjectFactory<Phantom> { 

    @Override 
    public P create() throws Exception { 
     // TODO Auto-generated method stub 
     return new P(); 
    } 

    @Override 
    public PooledObject<P> wrap(P phantomjs) { 
     // TODO Auto-generated method stub 
     return new DefaultPooledObject<P>(phantomjs); 
    } 

} 

:

public class PPool extends GenericObjectPool<P>{ 

    /** 
    * Constructor. 
    * 
    * It uses the default configuration for pool provided by 
    * apache-commons-pool2. 
    * 
    * @param factory 
    */ 
    public PPool(PooledObjectFactory<P> factory) { 
     super(factory); 
    } 

    /** 
    * 
    * 
    * @param factory 
    * @param config 
    */ 
    public PPool(PooledObjectFactory<P> factory, 
      GenericObjectPoolConfig config) { 
     super(factory, config); 
    } 
} 

그리고 그 후

가 나는 PFactory를 만들 내가 그랬어? 다음과 같이 시도해 보겠습니다.

 GenericObjectPoolConfig config = new GenericObjectPoolConfig(); 
     config.setMaxIdle(1); 
     config.setMaxTotal(10); 


     config.setTestOnBorrow(true); 
     config.setTestOnReturn(true); 
     pool = new PPool(new PFactory(), config); 

이제는?

답변

2

인스턴스를 추가 할 필요가 없습니다. 당신은 P 클래스의 팩토리를 제공합니다. 따라서 풀은 객체 수명주기를 관리합니다. 오브젝트를 얻는 경우 필요하면 Pool에 의해 생성됩니다. 그러므로 사용할 객체를 빌리십시오.

P pObject = pool.borrowObject(); 

설명을 참조 GenericObjectPool.html#borrowObject()

몇 가지 테스트 케이스를보고하십시오 : 내가 항상 곁에 실행 예 5 예를 들어 원하는 경우 TestGenericObjectPool.java

+0

을하지만? 그래서 내가 객체를 빌려 왔을 때 방금 준비한이 5 인스턴스를 가지고 있습니다. –

+0

minIdle을 5로 설정할 수 있다고 생각합니다. 그러면 풀이 5 개의 유휴 인스턴스를 유지할 것입니다. 나는 당신이 당신의 프로그램의 초기화에 사용하기 전에 물건을 빌릴 수 있다고 생각한다. 'pool.returnObject (pool.borrowObject());''pool.getNumIdle(); '을 체크 할 수 있습니다. – Chk0nDanger

+0

이 작동하지 않습니다 (int i = 0, l = config.getMinIdle(); , 내가 시도하지만 pool.getNumIdle() 실행할 때 0 인스턴스가 .. –