Yeah, that should be closing it....would you be establishing the
connection(s) anywhere else though?
And do you have a ResultsSet that you're leaving open? You would need to
close that, too.
Same for any prepared or callable statement as well. 

-----Original Message-----
From: sinoea kaabi [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, September 16, 2008 10:10 AM
To: Tomcat Users List
Subject: RE: Tomcat 5.5, JNDI Connection Pooling, Active connections
keep increasing....


Yes, as I said in the first post, that I have checked through all the
code, and I am closing all the connections (in a finally block) after
they have been used.


final Connection connection = datasource.getConnection();
try {
... 
..
blah .. blah
} finally {
   connection.close();
}

> Subject: RE: Tomcat 5.5, JNDI Connection Pooling, Active connections
keep increasing....
> Date: Tue, 16 Sep 2008 11:02:46 -0400
> From: [EMAIL PROTECTED]
> To: users@tomcat.apache.org
>
> At the end of the servlet or JSP or whichever, you need to kill off
> connections created that you establish.
>
>
>
> -----Original Message-----
> From: sinoea kaabi [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, September 16, 2008 9:56 AM
> To: Tomcat Users List
> Subject: RE: Tomcat 5.5, JNDI Connection Pooling, Active connections
> keep increasing....
>
>
> 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]
>
>
>
>
> ---------------------------------------------------------------------
> 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]



---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to