You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Vijay Anjur <vi...@gmail.com> on 2006/03/31 22:04:05 UTC
dbcp - connection pool
Hi,
I found that my physical connections never being closed... My code below:
private static void setupDataSourceConnectionPool()
{
try
{
private static InitialContext ic = null;
private static Context envCtx = null;
private static DataSource dsMyDb;
private static ObjectPool poolMyDb;
private static PoolingDataSource pdsMyDb;
private static BasicDataSource bdsMyDb;
dsMyDb = (DataSource) envCtx.lookup("ds/MyDbServer");
if (dsMyDb != null)
{
bdsMyDb = (BasicDataSource)dsINTLDB;
/*I am doing this because it keeps getting its default values in
GenericObjectPool */
poolINTLDB = new GenericObjectPool(null,
bdsMyDb.getMaxActive(),(byte)1,
bdsMyDb.getMaxWait(),bdsMyDb.getMaxIdle(), bdsMyDb.getMinIdle(),
bdsMyDb.getTestOnBorrow(),
dsMyDb.getTestOnReturn(), bdsMyDb.getTimeBetweenEvictionRunsMillis(),
bdsMyDb.getNumTestsPerEvictionRun(), bdsMyDb.getMinEvictableIdleTimeMillis(),
bdsMyDb.getTestWhileIdle());
ConnectionFactory cf1 = new DataSourceConnectionFactory(dsMyDb);
PoolableConnectionFactory pcf1 = new
PoolableConnectionFactory(cf1, poolMyDb, null, null, false, true);
pcf1.setValidationQuery(bdsMyDb.getValidationQuery());
pdsMyDb = new PoolingDataSource(poolMyDb);
}
}
My JNDI- properties in server.xml is:
<Resource
name="jdbc/intldbServer"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
validationQuery="Select 1"
maxWait="6000"
username="JAVAappserver"
password="JAVAappserver"
testOnBorrow="true"
testOnReturn="true"
testWhileIdle="true"
url="jdbc:jtds:sqlserver://MyDbServer:16000"
initialSize="5"
numTestsPerEvictionRun="10"
timeBetweenEvictionRunsMillis="100000"
minEvictableIdleTimeMillis="80000"
removeAbandoned="false"
removeAbandonedTimeout="120"
logAbandoned="true"
maxActive="20"
maxIdle="5"
minIdle="0"/>
I tried debugging through sourcecode, I found that an exception (shown
below) happens when destroyobject is called and that it is ignored.
java.sql.SQLException: Already closed.
at org.apache.commons.dbcp.PoolableConnection.close(
PoolableConnection.java:77)
at
org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(
PoolingDataSource.java:180)
at org.apache.commons.dbcp.DelegatingConnection.close(
DelegatingConnection.java:151)
at org.apache.commons.dbcp.PoolableConnection.reallyClose(
PoolableConnection.java:95)
at org.apache.commons.dbcp.PoolableConnectionFactory.destroyObject(
PoolableConnectionFactory.java:301)
at beehive.service.go.sql.GenericObjectPool.evict(
GenericObjectPool.java:1027)
at beehive.service.go.sql.GenericObjectPool$Evictor.run(
GenericObjectPool.java:1125)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
But I am calling close only once! Can someone help please???