[
https://issues.apache.org/jira/browse/DBCP-212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12487805
]
Marcos Sanz commented on DBCP-212:
----------------------------------
Indeed, the problem is triggered by the synchronized methods in
GenericObjectPool, like getNumActive() and getNumIdle(), often called by
applications. These methods serialize all executing threads to a single code
point, thus the number of unused objects in the pool increases at some moments
and eventually reaches the maxIdle value, which triggers the destroyObject(),
causing physical closes() of database connections.
This is very cumbersome, and nearly a paradox: there are indeed one thousand
threads in the example concurring for fifteen database connections, yet the
pool decides the connections are idle.
One solution to this problem can be the application always setting maxIdle :=
maxActive, though this has side effects. I am wondering whether it could be
possible to make these private fields (_maxActive, _numActive, ...) volatile
and get rid of the synchronized in the methods. I have to explore this. In the
meantime, I think this issue belongs to Commons-Pool, rather than to
Commons-DBCP.
> PoolingDataSource closes physical connections
> ---------------------------------------------
>
> Key: DBCP-212
> URL: https://issues.apache.org/jira/browse/DBCP-212
> Project: Commons Dbcp
> Issue Type: Bug
> Affects Versions: 1.2.2
> Environment: Windows XP, Java 1.5.0_06-b05, Sybase ASE 12.5.4,
> jConnect 6.0.5 EBF 13862, Commons Pool 1.3
> Reporter: Marcos Sanz
> Attachments: DBCPtester.java, DBCPtester.java
>
>
> By executing the attached program and monitoring the process id of the
> physical connections at the database server, it is possible to demonstrate
> that the connections are being actually physically closed and reopened by the
> application at a very high rate.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]