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]