Author: fhanik Date: Mon Oct 27 15:24:26 2008 New Revision: 708354 URL: http://svn.apache.org/viewvc?rev=708354&view=rev Log: Improvements to connection handling
Modified: tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PooledConnection.java Modified: tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java?rev=708354&r1=708353&r2=708354&view=diff ============================================================================== --- tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java (original) +++ tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java Mon Oct 27 15:24:26 2008 @@ -409,13 +409,15 @@ protected PooledConnection createConnection(long now, PooledConnection con) { //no connections where available we'll create one boolean error = false; + boolean inbusy = true; try { //connect and validate the connection con = create(); con.lock(); if (!busy.offer(con)) { + inbusy = false; log.debug("Connection doesn't fit into busy array, connection will not be traceable."); - } + } con.connect(); if (con.validate(PooledConnection.VALIDATE_INIT)) { //no need to lock a new one, its not contented @@ -424,6 +426,10 @@ con.setStackTrace(getThreadDump()); } return con; + } else { + //validation failed, make sure we disconnect + //and clean up + error =true; } //end if } catch (Exception e) { error = true; @@ -431,7 +437,7 @@ } finally { if (error ) { release(con); - busy.remove(con); + if (inbusy) busy.remove(con); } con.unlock(); }//catch Modified: tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PooledConnection.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PooledConnection.java?rev=708354&r1=708353&r2=708354&view=diff ============================================================================== --- tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PooledConnection.java (original) +++ tomcat/trunk/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PooledConnection.java Mon Oct 27 15:24:26 2008 @@ -61,7 +61,7 @@ protected void connect() throws SQLException { if (connection != null) { try { - this.disconnect(); + this.disconnect(false); } catch (Exception x) { log.error("Unable to disconnect previous connection.", x); } //catch @@ -90,11 +90,11 @@ } protected void reconnect() throws SQLException { - this.disconnect(); + this.disconnect(false); this.connect(); } //reconnect - protected synchronized void disconnect() throws SQLException { + protected synchronized void disconnect(boolean finalize) throws SQLException { if (isDiscarded()) { return; } @@ -103,7 +103,7 @@ connection.close(); } connection = null; - parent.finalize(this); + if (finalize) parent.finalize(this); } @@ -121,7 +121,7 @@ public boolean abandon() { try { - disconnect(); + disconnect(true); } catch (SQLException x) { log.error("", x); } //catch @@ -157,6 +157,10 @@ } public boolean validate(int validateAction,String sql) { + if (this.isDiscarded()) { + return false; + } + if (!doValidate(validateAction)) { //no validation required, no init sql and props not set return true; @@ -202,9 +206,15 @@ */ public void release() { try { - disconnect(); + disconnect(true); } catch (SQLException x) { - //TODO + if (log.isDebugEnabled()) { + log.debug("Unable to close SQL connection",x); + } + } catch (Exception x) { + if (log.isDebugEnabled()) { + log.debug("Unable to close SQL connection",x); + } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]