Where are you closing the connection? -----Original Message----- From: Mon Cab [mailto:[EMAIL PROTECTED] Sent: Thursday, March 01, 2007 12:23 PM To: Struts User Group Subject: Connection, pool exhausted error
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] This message contains information that may be privileged or confidential and is the property of the Capgemini Group. It is intended only for the person to whom it is addressed. If you are not the intended recipient, you are not authorized to read, print, retain, copy, disseminate, distribute, or use this message or any part thereof. If you receive this message in error, please notify the sender immediately and delete all copies of this message. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]