2017-07-10 11 views
1

私は、Javaアプリケーションで接続プールを作成するためにApacheコモンズパッケージを使用しています。 MAXACTIVE値は0に設定され、MINACTIVE値は1に設定されます。setMaxWait()メソッドを使用して、待機時間を30秒に設定します。つまり、getConnection()メソッドが呼び出されると30秒間待機し、それは例外をスローします(アイドルオブジェクトを取得できません)。Java Connection Pooling - addObject()クエリ

私はcatchブロックの中でメソッドaddObject()とgetConnection()を連続して呼び出しています。 MAXACTIVEパラメータが0に設定されているにもかかわらず、Connectionオブジェクトを取得できます。これはどのように可能ですか? addObject()メソッドが呼び出されたときにプールに起こり、新しいアイドルオブジェクトがプール内に作成されたときにどのようにMAXACTIVEとMINACTIVEなどの様々なパラメータが影響を受けている何

try { 
    connection = datasource.getConnection();       
} catch (Exception e1) { 
    try { 
     datasource.addObject(); 
     connection = datasource.getConnection(); 
    } catch (Exception ignored) { 
     /* Ignored */ 
    } 
} 

+0

あなたのコードは、単語で説明するのではなく、実際に表示する必要があります。 – assylias

+0

@assylias完了! – Amit

+0

使用しているCommons Poolのバージョンは何ですか? –

答えて

0

私はクラスGenericObjectPool

にはApache Commonsのプール2.4.2(最新)内のaddObject()を見ればそれはidleObjectsに追加されアイドルプールオブジェクトを作成します。最大アクティブ効果allObjectsは異なるオブジェクトです。

アイドル接続を制御するには、answerを参照してください。

@Override 
    public void addObject() throws Exception { 
     ... 
     PooledObject<T> p = create(); 
     addIdleObject(p); 
    } 

/* 
* All of the objects currently associated with this pool in any state. It 
* excludes objects that have been destroyed. The size of 
* {@link #allObjects} will always be less than or equal to {@link 
* #_maxActive}. Map keys are pooled objects, values are the PooledObject 
* wrappers used internally by the pool. 
*/ 
private final Map<IdentityWrapper<T>, PooledObject<T>> allObjects = 
    new ConcurrentHashMap<IdentityWrapper<T>, PooledObject<T>>(); 

private final LinkedBlockingDeque<PooledObject<T>> idleObjects; 
関連する問題