[ http://jira.jboss.com/jira/browse/JBAS-680?page=history ]

Scott M Stark reassigned JBAS-680:
----------------------------------

    Assign To: Alexey Loubyansky  (was: Scott M Stark)

> PreparedStatement leak in HiLoKeyGenerator.java
> -----------------------------------------------
>
>          Key: JBAS-680
>          URL: http://jira.jboss.com/jira/browse/JBAS-680
>      Project: JBoss Application Server
>         Type: Bug
>     Versions: JBossAS-4.0.0 Final
>     Reporter: SourceForge User
>     Assignee: Alexey Loubyansky

>
>
> SourceForge Submitter: cmunday .
> Hi,
> There is a Statement that does not get closed and is 
> left to be finialized within the following method (included 
> below) from the HiLoKeyGenerator class.
> The statement create by:
> stmt = con.prepareStatement(nextKeyQuery);
> leaks because the variable "stmt" is re-assigned with:
> stmt = con.prepareStatement(updateStmt);
> This second statement is closed within the finally clause 
> but the first one is never closed and should be
> Cheers,
> Craig.
>  
> public synchronized Object generateKey()
>    {
>       if(lo < hi)
>         return new Integer(lo++);
>       Connection con = null;
>       PreparedStatement stmt = null;
>       ResultSet rs = null;
>       Transaction currentTx = null;
>       try
>       {
>          currentTx = tm.suspend();
>          tm.begin();
>          con = datasource.getConnection();
>          int rowsUpdated;
>          do
>          {
>             if(isDebugEnabled) log.debug("Executing SQL: " 
> + nextKeyQuery);
>             stmt = con.prepareStatement(nextKeyQuery);
>             rs = stmt.executeQuery();
>             if(!rs.next())
>                throw new Exception("Couldn't read next key: 
> ResultSet is empty.");
>             lo = rs.getInt(1);
>             hi = lo + blockSize;
>             if(isDebugEnabled)
>                log.debug("Executing SQL: " + updateStmt 
> + " [p1=" + hi + ",p2=" + lo + "]");
>             stmt = con.prepareStatement(updateStmt);
>             stmt.setInt(1, hi);
>             stmt.setInt(2, lo);
>             rowsUpdated = stmt.executeUpdate();
>          }
>          while(rowsUpdated == 0);
>          tm.commit();
>       }
>       catch(Exception e)
>       {
>          log.error("Error fetching next key:", e);
>          try
>          {
>             tm.rollback();
>          }
>          catch(SystemException se)
>          {
>             log.error("Couldn't rollback transaction: ", se);
>          }
>       }
>       finally
>       {
>          JDBCUtil.safeClose(rs);
>          JDBCUtil.safeClose(stmt);
>          JDBCUtil.safeClose(con);
>          if(currentTx != null)
>          {
>             try
>             {
>                tm.resume(currentTx);
>             }
>             catch(InvalidTransactionException ite)
>             {
>                log.error("Invalid transaction: ", ite);
>             }
>             catch(SystemException se)
>             {
>                log.error("Unexpected error: ", se);
>             }
>          }
>       }
>       return new Integer(lo++);
>    }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://jira.jboss.com/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
JBoss-Development mailing list
JBoss-Development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to