How exaclt do you mean? Anywhere in my code where you have seen that?
Thanks! > Subject: RE: Tomcat 5.5, JNDI Connection Pooling, Active connections keep > increasing.... > Date: Tue, 16 Sep 2008 10:26:03 -0400 > From: [EMAIL PROTECTED] > To: users@tomcat.apache.org > > Sounds like you're not explicitly killing off the connections you set in > the first place. > > -----Original Message----- > From: sinoea kaabi [mailto:[EMAIL PROTECTED] > Sent: Tuesday, September 16, 2008 4:24 AM > To: users@tomcat.apache.org > Subject: Tomcat 5.5, JNDI Connection Pooling, Active connections keep > increasing.... > > > Dear all, > I seem to have problems with connection pooling. > I have tried so many ways, before I use to get the exhausted scenario, > where there were no connections left to use, and now I am getting a > different problem. > > I have been digging in this issue for too long, and I am not sure if I > understand the depth of the connection pooling concept. > > > I have set the max active connections to 40. > > My active connections keep increasing, they never seem to return back to > the pool, > eventhough when no-one is visiting the site. > (Well, I have had up to 3 idle connections and that is the most I have > ever had) > > After a few days, the active connections reach to 37, and then > afterwards the active connections > are reset to 0. > > It basically starts from 0 to 37 and then again 0 to 37, and so on.... > > > My understanding is that: > > 1. An active connection is a connection that is currently used, and not > yet returned back to the pool > > 2. An active connection will be returned back to the pool > straight after its usage and become an idle connection > The active connection is returned back to the pool as soon as you > > call the connection.close() method (assuming that you have configured > for connection pooling) > > 3. An idle connection can only be idle for an X amount of time and then > it will be removed from the pool and get destroyed > > 4. An idle connection will become an active connection when it is > required and then returned back to the pool as an idle connection > when calling connection.close() > > > ------------------------------------------------------------------------ > ---- > If that is all correct then why do my active connections keep > increasing? > > ------------------------------------------------------------------------ > ---- > > Am I closing all the connections? > Well, I have checked every single line of code, and yes I am closing > result sets, statements and connections in a finally block: > > [code] > } finally { > results.close(); > } > > } finally { > statement.close(); > } > > } finally { > connection.close(); > } > [/code] > > Please have a look at my code and configuration below: > > > My environment: > JDK 1.5.0_12 > Tomcat 5.5.27 > MySQL 5 > > My Web apps context.xml under the META-INF folder: > [code] > > name="jdbc/myDB" > factory="org.apache.commons.dbcp.BasicDataSourceFactory" > auth="Container" > type="javax.sql.DataSource" > maxActive="40" > maxIdle="10" > maxWait="15000" > removeAbandoned="true" > removeAbandonedTimeout="60" > logAbandoned="true" > username="username" > password="password" > driverClassName="com.mysql.jdbc.Driver" > url="jdbc:mysql://localhost:3306/mydb" /> > > [/code] > > My Host configuration in server.xml > [code] > appBase="webapps/mysite" unpackWARs="true" autoDeploy="false" > xmlValidation="false" xmlNamespaceAware="false"> > > className="org.apache.catalina.valves.FastCommonAccessLogValve" > prefix="mysite_access_log." > suffix=".txt" > pattern="common" > directory="C:/Program Files/Apache Software > Foundation/Tomcat 5.5/webapps/mysite/logs"/> > mysite.com > > [/code] > > > Here is the class that I use the get the datasource > [code] > > import... > > public class Data { > > private static final Logger SQL = Logger.getLogger("sql"); > private static final Logger DATASOURCE = > Logger.getLogger("datasource"); > private static final Logger MANY_CONNECTIONS = > Logger.getLogger("manyconnections"); > private static BasicDataSource ds = null; > > > public static DataSource getDataSource() throws SQLException { > if (ds == null) { > DATASOURCE.info("DataSource is NULL "); > MANY_CONNECTIONS.info("DataSource is NULL "); > try { > final Context initContext = new InitialContext(); > ds = > (BasicDataSource)initContext.lookup("java:/comp/env/jdbc/myDB"); > initContext.close(); > logDataSource(ds); > return ds; > } catch (final NamingException e) { > e.printStackTrace(); > throw new RuntimeException("Java naming exception when > getting connection from tomcat pool: " + e.getMessage()); > } > } else { > logDataSource(ds); > return ds; > } > } > > /** > * Logs the datasource. > * @param ds > */ > private static void logDataSource(final BasicDataSource ds) { > DATASOURCE.info("The max active connections are : " + > ds.getMaxActive()); > DATASOURCE.info("The max idle connections are : " + > ds.getMaxIdle()); > DATASOURCE.info("The max wait is : " + ds.getMaxWait()); > DATASOURCE.info("The max opening prepared statements are : " + > ds.getMaxOpenPreparedStatements()); > DATASOURCE.info("The number of active connections are : " + > ds.getNumActive()); > DATASOURCE.info("The number of idle connections are : " + > ds.getNumIdle()); > DATASOURCE.info("\n====================================\n"); > if (ds.getNumActive()>= 20 || ds.getNumIdle()>= 10) { > MANY_CONNECTIONS.info("The max active connections are : " + > ds.getMaxActive()); > MANY_CONNECTIONS.info("The max idle connections are : " + > ds.getMaxIdle()); > MANY_CONNECTIONS.info("The max wait is : " + > ds.getMaxWait()); > MANY_CONNECTIONS.info("The max opening prepared statements > are : " + ds.getMaxOpenPreparedStatements()); > MANY_CONNECTIONS.info("The number of active connections are > : " + ds.getNumActive()); > MANY_CONNECTIONS.info("The number of idle connections are : > " + ds.getNumIdle()); > > MANY_CONNECTIONS.info("\n====================================\n"); > } > } > > > /** > * Checks if a connection is open or closed and logs the results. > * @param connection > * @param string > */ > public static void logConnection(final Connection connection, final > String string) { > try { > if (!connection.isClosed()) { > DATASOURCE.info("The connection is still open>> " + > string); > MANY_CONNECTIONS.info("The connection is still open>> " > + string); > } else { > DATASOURCE.info("The connection is CLOSED>> " + > string); > MANY_CONNECTIONS.info("The connection is CLOSED>> " + > string); > } > } catch (final SQLException e) { > e.printStackTrace(); > DATASOURCE.info(e.getMessage()); > MANY_CONNECTIONS.info(e.getMessage()); > } > } > > } > > [/code] > > And yes, I am closing all the connections (I have checked everywhere, I > should be right) , > here is a typical code example of how I use JDBC: > > [code] > final Collection branches = > BranchData.loadBranches(Data.getDataSource(), 1); > [/code] > > [code] > > import ... > > > public class BranchData { > > private static final Logger LOG = > Logger.getLogger(BranchData.class); > private static final Logger SQL = Logger.getLogger("sql"); > > /** > * Loads a collection of branches for the specified shop ID. > * @param datasource > * @param shopid > * @return Returns a collection of branches for the specified shop > ID; > * or an empty collection if none are found. > * @throws SQLException > */ > public static Collection loadBranches(final DataSource > datasource, final int shopid) throws SQLException { > > final String sql = "select * from branch where fk_shop_id = " + > shopid; > > SQL.info(sql); > > final Connection connection = datasource.getConnection(); > try { > final Statement statement = connection.createStatement(); > try { > final ResultSet results = statement.executeQuery(sql); > try { > > final Collection branches = new > LinkedList(); > while (results.next()) { > > final Branch branch = new Branch(); > > branch.setId(results.getInt("pk_branch_id")); > branch.setName(results.getString("branchname")); > branch.setPhone(results.getString("phone")); > branch.setFax(results.getString("fax")); > > branch.setDescription(results.getString("description")); > > branch.setPostcode(results.getString("postcode")); > > branch.setAddressline1(results.getString("addressline1")); > > branch.setAddressline2(results.getString("addressline2")); > branch.setCity(results.getString("city")); > branch.setCounty(results.getString("county")); > branch.setCountry(results.getString("country")); > > branch.setVatnumber(results.getString("vatnumber")); > > branch.setMinimumdeliveryorder(results.getBigDecimal("minimumdeliveryord > er")); > branch.setLogo(results.getString("logo")); > branch.setHoldtime(results.getInt("holdtime")); > > branch.setSmtphost(results.getString("smtphost")); > > branch.setEmailusername(results.getString("emailusername")); > > branch.setEmailpassword(results.getString("emailpassword")); > > branch.setEmailfrom(results.getString("emailfrom")); > > branch.setEmailorder(results.getString("emailorder")); > > branch.setPaymentValue(results.getBigDecimal("paymentvalue")); > > branch.setPaymentOption(results.getString("paymentoption")); > branch.setShopid(results.getInt("fk_shop_id")); > branches.add(branch); > > } > > return branches; > > } finally { > results.close(); > } > > } finally { > statement.close(); > } > > } finally { > connection.close(); > Data.logConnection(connection, "BranchData > [loadBranches(final DataSource datasource, final int shopid) throws > SQLException]"); > } > } > > } > > [/code] > > > > > Seriously, I need help.... > > > ------------------------------------- > > > > _________________________________________________________________ > Make a mini you and download it into Windows Live Messenger > http://clk.atdmt.com/UKM/go/111354029/direct/01/ > > > --------------------------------------------------------------------- > To start a new topic, e-mail: users@tomcat.apache.org > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > _________________________________________________________________ Win New York holidays with Kellogg’s & Live Search http://clk.atdmt.com/UKM/go/111354033/direct/01/ --------------------------------------------------------------------- To start a new topic, e-mail: users@tomcat.apache.org To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]