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]

Reply via email to