I am getting a connection, pool exhausted error, in the action class below. The error happens exactly after the hundredth connection, even though I have closed all my statements, result sets and contexts. (I know that one would not normally do db access in an Action class, however, I'm implementing a quick and dirty presence detection for an external service, and dont need to worry about elegance.)
[http-8080-Processor23] FATAL webapp.WEBCHAT_MessengerPresenceAction - org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted 2007-02-28 22:07:35,146 package webapp; import webapp.utils.*; import javax.servlet.http.*; import org.apache.commons.logging.*; import org.apache.struts.action.*; import org.apache.struts.validator.*; import org.apache.struts.util.*; import javax.naming.*; import java.sql.*; import javax.sql.*; import java.util.*; public class WEBCHAT_MessengerPresenceAction extends Action { private static Log log = LogFactory.getLog(WEBCHAT_MessengerPresenceAction.class); public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res ) throws Exception { DynaActionForm dynaForm = (DynaActionForm)form; MessageResources messageResources = getResources(req); Context initContext =null; Statement stmt =null; ResultSet rs =null; try { User user = null; String expired_sessions_sql = "DELETE FROM userplane_pending_wm WHERE "+ "date_add(insertedAt, INTERVAL 15 MINUTE) < Now() "+ "AND date_add(openedWindowAt, INTERVAL 5 MINUTE) < Now();"; log.debug("expired_sessions_sql = "+ expired_sessions_sql); initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource ds = (DataSource)envContext.lookup("jdbc/webdb"); Connection con = ds.getConnection(); stmt = con.createStatement(); stmt.executeUpdate(expired_sessions_sql); boolean bFoundPendingWMs = false; if (user!=null) { String presence_sql = "UPDATE user SET lastTimeOnline = NOW() "+ "WHERE user_id = "+ user.user_id+";"; log.debug("presence_sql = "+ presence_sql); stmt.executeUpdate(presence_sql); String pending_chats_sql = "SELECT originatingUserID FROM userplane_pending_wm "+ "WHERE destinationUserID = " + user.user_id + " "+ "AND ( openedWindowAt IS NULL "+ "OR date_add(openedWindowAt, INTERVAL 5 MINUTE) < Now() );"; log.debug("pending_chats_sql = "+ pending_chats_sql); rs = stmt.executeQuery(pending_chats_sql); if (rs.next()) { rs.close(); return mapping.findForward("pixle1Redirect"); } else { rs.close(); return mapping.findForward("pixle2Redirect"); } } return null; } catch (Exception e) { log.fatal(e); return null; } finally { log.debug("in finally "); if( rs != null ) try { rs.close(); log.debug("rs closed ");} catch( SQLException ignore ) { log.debug("rs not closed ");} if( stmt != null ) try { stmt.close(); log.debug("stmt closed "); } catch( SQLException ignore ) { log.debug("stmt not closed ");} if( initContext != null ) try { initContext.close(); log.debug("ctxt closed ");} catch( Exception ignore ) { log.debug("ctxt not closed ");} } } } ____________________________________________________________________________________ Need Mail bonding? Go to the Yahoo! Mail Q&A for great tips from Yahoo! Answers users. http://answers.yahoo.com/dir/?link=list&sid=396546091 --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]