You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by "Hussain, Arshad" <Hu...@aetna.com> on 2008/08/26 16:53:59 UTC
DBCP-Abandoned Connection are not being re-claimed , can some one help pleae
I am trying to test if Abandoned Connection are being re-claimed, this
not working and after 5-8 connection the loops hangs.
Can anyone help.
1. DBBean.java -Establishes Connection Pooling
2. PerformConnection .java- Here I leave connection open for every
alternative counter
DBbean is creates connection pool c
connectionPool = new GenericObjectPool(null);
connectionPool.setMinIdle(2);
connectionPool.setMaxActive(3);
ConnectionFactory connectionFactory =
new DriverManagerConnectionFactory(connectString,
Config.getDbUserId(),
Config.getDbPassword()
);
AbandonedConfig config = new AbandonedConfig ();
config.setRemoveAbandoned(true);
config.setRemoveAbandonedTimeout(5);
config.setLogAbandoned(true);
PoolableConnectionFactory poolableConnectionFactory =
new
PoolableConnectionFactory(connectionFactory,connectionPool,null,null,fal
se,true,config);
connectionPool.setFactory(poolableConnectionFactory );
dataSource = new PoolingDataSource(connectionPool);
************************************************************************
************************************************************************
************************************************************************
*****
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import org.apache.commons.dbcp.AbandonedConfig;
import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.DriverConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDataSource;
import org.apache.commons.dbcp.PoolingDriver;
import org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS;
import org.apache.commons.dbcp.datasources.SharedPoolDataSource;
import org.apache.commons.pool.KeyedObjectPoolFactory;
import org.apache.commons.pool.ObjectPool;
import org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory;
import org.apache.commons.pool.impl.GenericObjectPool;
import phc.common.Config;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;
import java.sql.Statement;
import java.sql.*;
public class DBBean
{
public static Connection dbCon;
private static PoolingDataSource dataSource=null;
private static boolean initalFlag=false;
private static SharedPoolDataSource sharedDatasource;
private static final String driver =
"oracle.jdbc.driver.OracleDriver";
private static final String username = Config.getDbUserId();
private static final String password = Config.getDbPassword();
private static final String jdbcConnection =
"jdbc:oracle:thin:@" + Config.getDbConnectString();
protected static GenericObjectPool connectionPool;
public DBBean()
{
}
public static Connection connect()
throws Exception
{
String connectString = "";
Connection dbCon = null;
if(!initalFlag || dataSource==null)
{
setupDataSource();
initalFlag=true;
}
return dataSource.getConnection();
}
public void close(Connection dbCon)
throws Exception
{
dbCon.close();
}
static String dbDriver = "oracle.jdbc.driver.OracleDriver";
public static void setupDataSource() {
String connectString = "";
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
connectString = "jdbc:oracle:thin:@" +
Config.getDbConnectString();
connectionPool = new GenericObjectPool(null);
connectionPool.setMinIdle(2);
connectionPool.setMaxActive(3);
ConnectionFactory connectionFactory =
new DriverManagerConnectionFactory(connectString,
Config.getDbUserId(),
Config.getDbPassword()
);
AbandonedConfig config = new AbandonedConfig ();
config.setRemoveAbandoned(true);
config.setRemoveAbandonedTimeout(5);
config.setLogAbandoned(true);
PoolableConnectionFactory poolableConnectionFactory =
new
PoolableConnectionFactory(connectionFactory,connectionPool,null,null,fal
se,true,config);
connectionPool.setFactory(poolableConnectionFactory );
dataSource = new PoolingDataSource(connectionPool);
}catch (Exception e) {e.printStackTrace();}
}
public static void main(String[] args)
{
long vTotalMem =0;
long vFreeMem=0;
boolean flag=true;
try
{
Connection conn = connect();
new PerformConnection(conn,true).start();
}
long currentTiming = System.currentTimeMillis();
// Perform the SQL operation many times. Notice that
// we are kicking these off as simultaneous threads,
// closer to the behavior one might expect in a
// multi-threaded environment such as a web application
for (int x = 0; x <10; x++)
{
Trace.log(" x=" + x +"connectionPool.getNumActive()" +
DbBean.connectionPool.getNumActive() );
Trace.log(" x=" + x +"connectionPool.getNumIdle()" +
DbBean.connectionPool.getNumIdle() );
Trace.log(" x=" + x +"connectionPool.getMaxActive() " +
DbBean.connectionPool.getMaxActive() );
vTotalMem = Runtime.getRuntime().totalMemory();
vFreeMem = Runtime.getRuntime().freeMemory();
Trace.log("* Total: " + vTotalMem +" Bytes FreeMem:
" + vFreeMem +" Bytes");
Connection conn = connect();
if( x%2==0)
flag=false;
else
flag=true;
Trace.log("connection flag="+ flag);
new PerformConnection(conn,flag).start();
if( connectionPool.getNumIdle() < 2 &&
(connectionPool.getNumActive() > connectionPool.getMaxActive() - 3))
Trace.log ("Condition met" );
else
Trace.log ("Condition not met" );
}
System.out.println("out of the loop");
float timing =
(System.currentTimeMillis() - currentTiming)
/ 1000f;
System.out.println("Seconds with pool : " + timing);
currentTiming = System.currentTimeMillis();
}
catch (Exception e) { e.printStackTrace(); }
}
}
************************************************************************
************************************************************************
************************************************************************
*****
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class PerformConnection extends Thread
{
private static final String testSQL = "SELECT * from dual ";
Connection connection;
boolean connectionStatus ;
PerformConnection(Connection myConnection, boolean
connectionStatus)
{
this.connection = myConnection;
this.connectionStatus=connectionStatus;
}
public void run()
{
Connection myConnection = connection;
Statement myStatement = null;
ResultSet myResult = null;
try
{
myStatement = myConnection.createStatement();
myResult = myStatement.executeQuery(testSQL);
int numcols = myResult.getMetaData().getColumnCount();
while (myResult.next())
{
for (int i = 1; i <= numcols; i++)
{ myResult.getString(i); }
}
} catch (SQLException e)
{
e.printStackTrace();
} finally
{
try { myResult.close(); } catch (Exception e) { }
try { myStatement.close(); } catch (Exception e) { }
if( this.connectionStatus)
try { myConnection.close(); } catch (Exception e) { }
}
}
}
This e-mail may contain confidential or privileged information. If
you think you have received this e-mail in error, please advise the
sender by reply e-mail and then delete this e-mail immediately.
Thank you. Aetna