Dies ist eine alte Version des Dokuments!


Connection Pooling

Den folgenden Source habe ich mal eben schnell eingehackt und ist daher ungetestet, sollte aber trotzdem funktionieren ;-)

package com.sowas.lib.sql;
 
import java.sql.*;
import java.util.*;
 
public class ConnectionPool{
	Vector vPool = new Vector();
	String strDriver, strURLDatabase;
 
	//....................
 
	public ConnectionPool(String strDriver, String strURLDatabase){
		this.strDriver=strDriver;
		this.strURLDatabase=strURLDatabase;
	}
 
	//....................
 
	public Connection getConnection(){
		PoolConnection poolCon;
		for (int c=0; c < vPool.size(); c++)
			if (((PoolConnection)vPool.elementAt(c)).fInUse == false){
				poolCon = (PoolConnection)vPool.elementAt(c);
				poolCon.fInUse=true; 
				return poolCon.con;
			}
 
		Connection con;
		try{
			Class.forName(strDriver);
			con = DriverManager.getConnection(strURLDatabase);
		}catch (Exception e){
			e.printStackTrace();
			return null;
		}
 
		poolCon = new PoolConnection(con, true);
		vPool.addElement(poolCon);
		return con;
	}
 
	//....................
 
	public void closeConnection(Connection con){
		try {
			int c=0;
			while (!((PoolConnection)vPool.elementAt(c)).con.equals(con))
				c++;
			((PoolConnection)vPool.elementAt(c)).fInUse=false;
		} catch (Exception e) {
			e.printStackTrace();
		}	
	}
	//....................
 
}
 
class PoolConnection{
	Connection  con;
	boolean		fInUse;
 
	public PoolConnection(Connection con, boolean fInUse){
		this.con=con;
		this.fInUse=fInUse;
	}
}

Die Verwendung der Klasse könnte so aussehen:

ConnectionPool cp = new ConnectionPool("org.gjt.mm.mysql.Driver", "jdbc:mysql://localhost/datenbank");
Connection con = cp.getConnection();
Statement stat = con.createStement();
...
stat.close();
cp.closeConnection(con);

Natürlich kann noch einiges verbesert werden.
Insbesondere sind keine Timeouts berücksichtigt.
Beim Verwenden von Connection Pooling sollten Timeouts aber ohnehin abgeschaltet werden.


Eigene Werkzeuge
Werkzeuge

gratis Counter by GOWEB
seit 9.10.2007