vgritsenko    01/06/22 21:49:53

  Modified:    src/org/apache/cocoon/transformation SQLTransformer.java
  Log:
  Fix SQLTransformer in HEAD: It was not returning connections to the pool
  failing with exception in HardResourceLimitingPool
  
  Revision  Changes    Path
  1.10      +36 -80    
xml-cocoon2/src/org/apache/cocoon/transformation/SQLTransformer.java
  
  Index: SQLTransformer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/transformation/SQLTransformer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SQLTransformer.java       2001/06/22 05:43:09     1.9
  +++ SQLTransformer.java       2001/06/23 04:49:52     1.10
  @@ -55,7 +55,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]";>Giacomo Pati</a>
    *         (PWR Organisation & Entwicklung)
    * @author <a href="mailto:[EMAIL PROTECTED]";>Sven Beauprez</a>
  - * @version CVS $Revision: 1.9 $ $Date: 2001/06/22 05:43:09 $ $Author: cziegeler $
  + * @version CVS $Revision: 1.10 $ $Date: 2001/06/23 04:49:52 $ $Author: vgritsenko $
    */
   
   public class SQLTransformer extends AbstractTransformer implements Composable, 
Recyclable, Disposable {
  @@ -216,11 +216,7 @@
           Query query = (Query) queries.elementAt(index);
           try {
               query.execute();
  -        } catch (SQLException e) {
  -            getLogger().debug("SQLTransformer.executeQuery()", e);
  -            throw new SAXException(e);
  -        }
  -        try {
  +
               if (showNrOfRows!=null && showNrOfRows.equalsIgnoreCase("true"))  {
                 attr.addAttribute(my_uri,query.nr_of_rows,query.nr_of_rows,"CDATA",
                                   String.valueOf(query.getNrOfRows()));
  @@ -247,6 +243,12 @@
           } catch (SQLException e) {
               getLogger().debug("SQLTransformer.executeQuery()", e);
               throw new SAXException(e);
  +        } finally {
  +            try{
  +                query.close();
  +            }catch(SQLException e){
  +                getLogger().warn("SQLTransformer: Could not close JDBC connection", 
e);
  +            }
           }
           this.end(query.rowset_name);
   //        this.contentHandler.endPrefixMapping("");
  @@ -784,13 +786,7 @@
                       /** Do a lookup into the ancestors' result's values **/
                       AncestorValue av = (AncestorValue) object;
                       Query query = transformer.getQuery(query_index - av.level);
  -                    try {
  -                        sb.append(query.getColumnValue(av.name));
  -                    } catch (SQLException e) {
  -                        transformer.getTheLogger().debug("SQLTransformer", e);
  -                        close();
  -                        throw e;
  -                    }
  +                    sb.append(query.getColumnValue(av.name));
                   }
               }
               String query = sb.toString();
  @@ -833,9 +829,6 @@
               } catch (ComponentException cme) {
                   transformer.getTheLogger().error("Could not use connection: " + 
connection, cme);
               } finally {
  -                if (conn!=null && !conn.isClosed())  {
  -                  conn.close();
  -                }
                   if (datasource != null) dbSelector.release(datasource);
               }
           }
  @@ -843,15 +836,9 @@
           protected int getNrOfRows() throws SQLException  {
             int nr = 0;
             if (rs!=null) {
  -            try  {
                 rs.last();
                 nr = rs.getRow();
                 rs.beforeFirst();
  -            } catch (SQLException e)  {
  -              transformer.getTheLogger().debug("SQLTransformer", e);
  -              close();
  -              throw e;
  -            }
             } else  {
               if (outParameters!=null)  {
                 nr=outParameters.size();
  @@ -861,41 +848,23 @@
           }
   
           protected String getColumnValue(int i) throws SQLException {
  -            try {
  -                return transformer.getStringValue(rs.getObject(i));
  -            } catch (SQLException e) {
  -                transformer.getTheLogger().debug("SQLTransformer", e);
  -                close();
  -                throw e;
  -            }
  +            return transformer.getStringValue(rs.getObject(i));
           }
   
           protected String getColumnValue(String name) throws SQLException {
  -            try {
  -                return transformer.getStringValue(rs.getObject(name));
  -            } catch (SQLException e) {
  -                transformer.getTheLogger().debug("SQLTransformer", e);
  -                close();
  -                throw e;
  -            }
  +            return transformer.getStringValue(rs.getObject(name));
           }
   
           protected boolean next() throws SQLException {
  -            try {
  -              // if rv is not -1, then an SQL insert, update, etc, has
  -              // happened (see JDBC docs - return codes for executeUpdate)
  -              if (rv != -1)
  -                return true;
  -              if (rs == null || !rs.next()) {
  -                close();
  -                return false;
  -              }
  -              return true;
  -            } catch (SQLException e) {
  -                transformer.getTheLogger().debug("SQLTransformer", e);
  -                close();
  -                throw e;
  -            }
  +          // if rv is not -1, then an SQL insert, update, etc, has
  +          // happened (see JDBC docs - return codes for executeUpdate)
  +          if (rv != -1)
  +            return true;
  +          if (rs == null || !rs.next()) {
  +            close();
  +            return false;
  +          }
  +          return true;
           }
   
           protected void close() throws SQLException {
  @@ -907,10 +876,9 @@
                   if (cst != null)
                       cst.close();
               } finally {
  -              // already closed in execute()
  -//                if (conn!=null && !conn.isClosed())  {
  -//                  conn.close();
  -//                }
  +                if (conn != null)
  +                  conn.close();
  +                conn = null;
               }
           }
   
  @@ -923,13 +891,7 @@
             if (!isupdate && !isstoredprocedure) {
               for (int i = 1; i <= md.getColumnCount(); i++) {
                   transformer.start(md.getColumnName(i).toLowerCase(), attr);
  -                try {
  -                    transformer.data(getColumnValue(i));
  -                } catch (SQLException e) {
  -                    transformer.getTheLogger().debug("SQLTransformer", e);
  -                    close();
  -                    throw e;
  -                }
  +                transformer.data(getColumnValue(i));
                   transformer.end(md.getColumnName(i).toLowerCase());
               }
             } else if (isupdate && !isstoredprocedure){
  @@ -957,25 +919,21 @@
                     transformer.end((String)outParametersNames.get(counter));
                   } else  {
                       ResultSet rs = (ResultSet)obj;
  -                    transformer.start((String)outParametersNames.get(counter), 
attr);
  -                    ResultSetMetaData md = rs.getMetaData();
  -                    while (rs.next())  {
  -                      transformer.start(this.row_name, attr);
  -                      for (int i = 1; i <= md.getColumnCount(); i++) {
  -                          transformer.start(md.getColumnName(i).toLowerCase(), 
attr);
  -                          try {
  +                    try{
  +                        transformer.start((String)outParametersNames.get(counter), 
attr);
  +                        ResultSetMetaData md = rs.getMetaData();
  +                        while (rs.next())  {
  +                          transformer.start(this.row_name, attr);
  +                          for (int i = 1; i <= md.getColumnCount(); i++) {
  +                              transformer.start(md.getColumnName(i).toLowerCase(), 
attr);
                                 
transformer.data(transformer.getStringValue(rs.getObject(i)));
  -                          } catch (SQLException e) {
  -                              transformer.getTheLogger().debug("SQLTransformer", e);
  -                              rs.close();
  -                              close();
  -                              throw e;
  +                              transformer.end(md.getColumnName(i).toLowerCase());
                             }
  -                          transformer.end(md.getColumnName(i).toLowerCase());
  -                      }
  -                      transformer.end(this.row_name);
  +                          transformer.end(this.row_name);
  +                        }
  +                    }finally{
  +                        rs.close();
                       }
  -                    rs.close();
                       transformer.end((String)outParametersNames.get(counter));
                   }    
                 }catch (SQLException e)  {
  @@ -997,7 +955,5 @@
               this.level = level;
               this.name = name;
           }
  -
       }
  -
   }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to