Author: tchemit Date: 2011-04-15 10:52:51 +0200 (Fri, 15 Apr 2011) New Revision: 2246 Url: http://nuiton.org/repositories/revision/topia/2246 Log: Anomalie #561: PostgreSQL socket closed error (improve code) Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java 2011-04-14 12:47:09 UTC (rev 2245) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java 2011-04-15 08:52:51 UTC (rev 2246) @@ -37,7 +37,6 @@ import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.Properties; @@ -188,27 +187,9 @@ synchronized (pool) { - // before getting any connection, make sure there is not a closed - // connection in pool, if so then remove them from the pool - - Iterator<?> itr = pool.iterator(); - while (itr.hasNext()) { - Connection conn = (Connection) itr.next(); - if (conn.isClosed()) { - - // this connection is closed!, remove it - itr.remove(); - - if (log.isDebugEnabled()) { - log.debug("Remove already closed connection from pool " + - connection); - } - } - } - // try to use a connection from the pool (if any) - if (!pool.isEmpty()) { + while (!pool.isEmpty() && connection == null) { int last = pool.size() - 1; if (log.isTraceEnabled()) { log.trace("using pooled JDBC connection, pool size: " + @@ -216,6 +197,16 @@ } connection = pool.remove(last); + if (connection.isClosed()) { + + // this connection is closed!, don't use it + connection = null; + + if (log.isDebugEnabled()) { + log.debug("Remove already closed connection from pool " + + connection); + } + } } }