You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Shawn Heisey <ap...@elyograg.org> on 2015/04/30 22:40:41 UTC

[DBCP2] Timeout on PoolingDataSource#getConnection() ?

I'm using dbcp2-2.1 and pool2-2.3.

Is there any kind of timeout configurable (or even needed) when calling
getConnection() on a PoolingDataSource?  I was looking over my code for
possible problems and realized that I have no idea whether this call
might block indefinitely or whether it will always finish (or throw an
exception) within some reasonable timeframe.  The javadocs don't offer
anything useful, which hopefully means that there is no possibility of a
significant or indefinite pause.

Below is the code I'm using to initialize.  In this code, dsMaster is an
instance of javax.sql.DataSource, and one of the objects where I call
getConnection().

 ConnectionFactory cfMaster = new
DriverManagerConnectionFactory(masterUrl, dbUser, dbPass);
 PoolableConnectionFactory pcfMaster = new
PoolableConnectionFactory(cfMaster, null);
 pcfMaster.setValidationQuery(validationQuery);
 pcfMaster.setValidationQueryTimeout(5);
 opMaster = new GenericObjectPool<>(pcfMaster);
 pcfMaster.setPool(opMaster);
 dsMaster = new PoolingDataSource<>(opMaster);

Thanks,
Shawn


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: [DBCP2] Timeout on PoolingDataSource#getConnection() ?

Posted by Phil Steitz <ph...@gmail.com>.
On 4/30/15 1:40 PM, Shawn Heisey wrote:
> I'm using dbcp2-2.1 and pool2-2.3.
>
> Is there any kind of timeout configurable (or even needed) when calling
> getConnection() on a PoolingDataSource?  I was looking over my code for
> possible problems and realized that I have no idea whether this call
> might block indefinitely or whether it will always finish (or throw an
> exception) within some reasonable timeframe.  The javadocs don't offer
> anything useful, which hopefully means that there is no possibility of a
> significant or indefinite pause.
>
> Below is the code I'm using to initialize.  In this code, dsMaster is an
> instance of javax.sql.DataSource, and one of the objects where I call
> getConnection().
>
>  ConnectionFactory cfMaster = new
> DriverManagerConnectionFactory(masterUrl, dbUser, dbPass);
>  PoolableConnectionFactory pcfMaster = new
> PoolableConnectionFactory(cfMaster, null);
>  pcfMaster.setValidationQuery(validationQuery);
>  pcfMaster.setValidationQueryTimeout(5);
>  opMaster = new GenericObjectPool<>(pcfMaster);
>  pcfMaster.setPool(opMaster);
>  dsMaster = new PoolingDataSource<>(opMaster);

Client blocking / timeout above is controlled by the properties set
on the GenericObjectPool.  By default, the blockWhenExhausted
property of a GOP is true and maxWaitMillis is -1, which means
clients will block indefinitely.   If you want clients to fail when
there are no connections available, set blockWhenExhausted to
false.  If you want to block for n millis, leave blockWhenExhausted
true and set maxWaitMillis to n.   Alternatively, you could just use
BasicDataSource, which is a little simpler to set up and exposes the
pool properties directly.

Phil
>
> Thanks,
> Shawn
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org