You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by di...@apache.org on 2003/09/14 02:15:47 UTC

cvs commit: jakarta-commons/dbcp/src/java/org/apache/commons/dbcp BasicDataSource.java

dirkv       2003/09/13 17:15:47

  Modified:    dbcp/src/java/org/apache/commons/dbcp BasicDataSource.java
  Log:
  Bugzilla Bug 23081: DBCP - Bad DB Validation Query Hangs Everything
  - handle empty validationquery
  - improve validationQuery error reporting by testing the connectionFactory upon creation
  
  Revision  Changes    Path
  1.25      +23 -10    jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/BasicDataSource.java
  
  Index: BasicDataSource.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/BasicDataSource.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- BasicDataSource.java	13 Sep 2003 22:29:39 -0000	1.24
  +++ BasicDataSource.java	14 Sep 2003 00:15:47 -0000	1.25
  @@ -416,11 +416,15 @@
       protected String validationQuery = null;
   
       public String getValidationQuery() {
  -        return (this.validationQuery);
  +        return this.validationQuery;
       }
   
       public void setValidationQuery(String validationQuery) {
  -        this.validationQuery = validationQuery;
  +        if ((validationQuery != null) && (validationQuery.trim().length() > 0)) {
  +            this.validationQuery = validationQuery;
  +        } else {
  +            this.validationQuery = null;
  +        }
       }
   
       /** 
  @@ -800,9 +804,10 @@
               if (connectionFactory == null) {
                   throw new SQLException("Cannot create PoolableConnectionFactory");
               }
  -        } catch(RuntimeException e) {
  +            validateConnectionFactory(connectionFactory);
  +        } catch (RuntimeException e) {
               throw e;
  -        } catch(Exception e) {
  +        } catch (Exception e) {
               throw new SQLNestedException("Cannot create PoolableConnectionFactory", e);
           }
   
  @@ -811,8 +816,16 @@
           ((PoolingDataSource) dataSource).setAccessToUnderlyingConnectionAllowed(isAccessToUnderlyingConnectionAllowed());
           dataSource.setLogWriter(logWriter);
           return (dataSource);
  -
       }
  -
  -
  +    
  +    private void validateConnectionFactory(PoolableConnectionFactory connectionFactory) throws Exception {
  +        Connection conn = null;
  +        try {
  +            conn = (Connection) connectionFactory.makeObject();
  +            connectionFactory.validateConnection(conn);
  +        }
  +        finally {
  +            connectionFactory.destroyObject(conn);
  +        }
  +    }
   }