[ http://issues.apache.org/struts/browse/STR-200?page=all ] Don Brown closed STR-200: -------------------------
Resolution: Fixed > Connection Pool does not handle stale (closed) connections > ---------------------------------------------------------- > > Key: STR-200 > URL: http://issues.apache.org/struts/browse/STR-200 > Project: Struts Action 1 > Type: Bug > Components: Action > Versions: 1.0 Beta 2 > Environment: Operating System: other > Platform: Sun > Reporter: hnguyen > Assignee: Craig McClanahan > Fix For: 1.0.0 > > Struts connection pool implemented in GenericDataSource.java does not handle > stale connections. > Stale connections are connections having been closed by the database. This > could be due to no activity timeout (such as wait_timeout in mysql) or the > database was down and up again. Currently when returning a pool connection > to > a caller in getConnection(), Struts does not check if the real database > connection of that pool connection has been closed or not. > Below is my patch for this problem in the GenericDataSource.java, revision 1.5 > *** GenericDataSource.java.r1.5 Wed May 23 17:44:12 2001 > --- GenericDataSource.java.r1.5fixed Wed May 23 17:31:07 2001 > *************** > *** 402,414 **** > > // Return an existing connection from the pool if there is one > synchronized (connections) { > ! if (!connections.isEmpty()) { > ! useCount++; > GenericConnection connection = (GenericConnection) > connections.removeFirst(); > // unclose the connection's wrapper > connection.setClosed(false); > return(connection); > ! // return ((Connection) connections.removeFirst()); > DEBUG > } > } > > --- 402,425 ---- > > // Return an existing connection from the pool if there is one > synchronized (connections) { > ! while (!connections.isEmpty()) { > GenericConnection connection = (GenericConnection) > connections.removeFirst(); > + // Checking for stale connection. Stale connections > are > connections > + // closed by the database. This could be due to no > activity > + // timeout (such as mysql wait_timeout) or the database > was down > + // and up again. > + if (connection.getConnection().isClosed()) > + { > + activeCount --; > + connection = null; > + continue; > + } > + else { > // unclose the connection's wrapper > + useCount++; > connection.setClosed(false); > return(connection); > ! } > } > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/struts/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]