でコモンズプールを使用する人は誰ですか?自分でプールを作成しますか?
はい、あなたが意図したように、プールにはTCP接続が保持されます。
<bean class="com.company.ConnectionSupplier">
<constructor-arg>
<!-- The ConnectionSupplier wraps an object pool -->
<bean class="org.apache.commons.pool.impl.GenericObjectPool">
<constructor-arg>
<!-- The ObjectPool uses a ConnectionFactory to build new connections -->
<bean class="com.company.ConnectionFactory">
<constructor-arg value="server" />
<constructor-arg value="3000" />
</bean>
</constructor-arg>
<property name="maxActive" value="20" />
<property name="testOnBorrow" value="true" />
</bean>
</constructor-arg>
</bean>
のConnectionFactoryはBasePoolableObjectFactoryを拡張し、SocketFactoryの周りの小さなラッパーです:それはあなたがSpring構成を理解すると仮定すると、春を経てアップ配線されます。
@Firstコメント: ConnectionFactoryコンストラクタは、サーバーとポートを使用します。オーバーライドされたmakeObject()では、そのサーバーとポートに接続するソケットを作成します。作成したソケットをラップする 'Connection'オブジェクトを返します。これは、ソケットを介して通信するための便利な方法です。
接続は、ソケットを介して通信するために使用されるプロトコルによって提供される「ping」または「echo」の種類を使用してテストされます。ソケットが閉じられているかどうかを確認することを除いて、接続の検証/テストは実際には可能ではありません。その場合、プール内のConnectionは例外をスローした場合に無効になり、Connectionsを使用するすべてのメソッドはそのような種類の障害に対して準備され、別の接続で同じ操作が試されます。
DBCPに欠陥があると聞いたのはこれが初めてです...もっと具体的なものがありますか? – skaffman
@skaffman - ほとんどの理由で接続が失われた –
これは面白いです:http://static.springsource.com/projects/tc-server/6.0/admin/radmjdbc.html ... DBCPの不十分さについて言及しています。しかし、クローズドソースなので、それほど助けにはならない。 – skaffman