DBCP's initialSize doesn't work as expected
-------------------------------------------
Key: DBCP-215
URL: https://issues.apache.org/jira/browse/DBCP-215
Project: Commons Dbcp
Issue Type: Bug
Environment: Windows XP, jsdk1.4.2_07, Tomcat 5.0.28,
commons-dbcp-1.2.2, commons-pool-1.3, hibernate 2.1.7c,
mysql-connector-java-5.0.5, MySQL 5.1.11
Reporter: Rafael Leite
Priority: Minor
I've configured a datasource on Tomcat 5.0.28 using DBCP.
Reading it's documentation i found out a parameter to specify the datasource's
initial number of connections, the "initialSize" parameter. We want this
configured so the first users of our system don't have to wait for the
datasource to open the first connections to the database.
When put it to work, it didn't initialize the connections as defined on the
"initialSize" parameter.
I've made a lot of tests using the "minIdle" parameter as well, but the
connections are created only when the first user hits the application.
The BasicDataSourceFactory class initializes the datasources parameters and the
BasicDataSource class just create the initial connections when called according
to the DataSource interface (most likely on the getConnection() method). IMHO,
this way the initialSize parameter doesn't work as expected.
The DBCP-147 issue changed the BasicDataSource class to include the loop that
create the initial connections, but the patch don't really create the
connections when the datasource is created, only when it is called.
My suggestion is: before the BasicDataSourceFactory.createDataSource() method
returns it should ask the datasource to connect to create the initial
connections according to the initialSize parameter.
#1 One way could be to make the BasicDataSource.createDataSource() method
public and, if the initialSize parameter is higher than zero, call it at the
end of the BasicDataSourceFactory.createDataSource() method.
#2 Another possibility could be to create a initialize() method on
BasicDataSource. According to its parameters it could create the initial
connections to the database.
#3 To avoid changes to BasicDataSource, one could create a subclass of
BasicDataSource (lets call it X) with a constructor that receives an instance
of the superclass. On this constructor X'd copy all the attributes from the
superclass to it and call the inherited createDataSource() method. At the end
of the BasicDataSourceFactory.createDataSource() method, if the initialSize
parameter is higher than zero the factory would return a new instance of X
passing as parameter the BasicDataSource instance that was initialized with the
datasource's parameters.
I've created as a bug since the "initialSize" parameter doesn't work as
expected.
What do you guys think of this issue?
Thanks in advance for your time!
--
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]