wtorek, stycznia 26, 2010

LinkedBlockingQueue czyli jak napisać pulę JDBC

protected LinkedBlockingQueue<Connection> pool = new LinkedBlockingQueue<Connection>();

public Connection getConnection() throws SQLException {
long timeToGo = connAcquireTimeout;
long start = System.currentTimeMillis();
Connection conn = null;
int size = poolSize.get();
workerThread.orderConnections(size < poolMinSize ?
poolMinSize - size : 1);
// wkladamy do kolejki roboczej watku
// ilosc polaczen do zrobienia;
// watek w metodzie run wyjmuje Integer-a n,
// robi n polaczen i wklada je do pool-a

while (true) {
try {
conn = pool.poll(timeToGo, TimeUnit.MILLISECONDS);
break;
}
catch (InterruptedException ie) {
if (conn==null) {
long runTime = System.currentTimeMillis()-start;
if (runTime < timeToGo)
timeToGo -= runTime;
}
}}
return conn;
}

0 komentarze: