No. Closing the Initial context will close the connection(not database) to the naming service from which you look up the datasource. When you call ds.getConnection(), you actually get a proxy class which delegates your calls to actual vendor specific connection. When you call close on this, an event is fired which will actually return the database connection to the pool.
-----Original Message----- From: Mon Cab [mailto:[EMAIL PROTECTED] Sent: Thursday, March 01, 2007 12:35 PM To: Struts Users Mailing List Subject: RE: Connection, pool exhausted error I thought that closing the connection was unnecessary when using a connection pool. I was under the impression that one would just close the context, which would return the connectin to the connection pool. Is this not the case? --- "Kalra, Ashwani" <[EMAIL PROTECTED]> wrote: > > 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] > > === message truncated === ________________________________________________________________________ ____________ We won't tell. Get more on shows you hate to love (and love to hate): Yahoo! TV's Guilty Pleasures list. http://tv.yahoo.com/collections/265 --------------------------------------------------------------------- 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]