You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Shilpa Nalgonda <sn...@mypublisher.com> on 2004/09/22 21:28:56 UTC

RE: removeAbandoned in DBCP

Hi,
My connection pool works if i set the removeAbandon parameter to true, but i
still do not understand why it works that way,
can someone suggest...can i use that parameter...

<parameter>
          <name>removeAbandoned</name>
          <value>true</value>
</parameter>
<parameter>
            <name>removeAbandonedTimeout</name>
            <value>0</value>
</parameter>


-----Original Message-----
From: Shapira, Yoav [mailto:Yoav.Shapira@mpi.com]
Sent: Wednesday, September 22, 2004 11:13 AM
To: Tomcat Users List
Subject: RE: Tomcat 4.1 Connection Pooling...



Hi,
My configurations tend to be very similar to those in the documentation.
Check the DBCP (http://jakarta.apache.org/common/dbcp) site for what the
parameters like maxIdle mean.

My code to look up a DataSource and get a connection is the same as
yours, and the same as the docs.  It's boilerplate: Create an
InitialContext, lookup java:comp/env/whatever your resource name is,
cast it to DataSource, getConnection.

Yoav Shapira
Millennium Research Informatics


>-----Original Message-----
>From: Shilpa Nalgonda [mailto:snalgonda@mypublisher.com]
>Sent: Wednesday, September 22, 2004 11:05 AM
>To: Tomcat Users List
>Subject: RE: Tomcat 4.1 Connection Pooling...
>
>Thanks.
>Maybe its the parameter configuration can you send me your
configuration
>for
>connection pooling...
>I am using these parameters...
>maxActive :20
>>maxIdle :10
>>maxWait :10000
>>removeAbandoned :true  -- what exactly is MaxIdle  parameter..????
>
>Also my application makes 7 database queries, each query gets
connection
>from datasource and closes() the connection in finally block.  When it
gets
>connection from datasource it is supposed to get it from pool right???
>
>I noticed that after my application runs 3 times --(3x7 =21).. it gives
me
>this error
>
>org.apache.commons.dbcp.SQLNestedException: Cannot get a connection,
pool
>exhausted, cause:
>java.util.NoSuchElementException: Timeout waiting for idle object
>        at
>org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericOb..
>
>So can you send me ur config and code snippet to get datasource if
>possible...
>
>
>-----Original Message-----
>From: Shapira, Yoav [mailto:Yoav.Shapira@mpi.com]
>Sent: Wednesday, September 22, 2004 10:55 AM
>To: Tomcat Users List
>Subject: RE: Tomcat 4.1 Connection Pooling...
>
>
>
>Hi,
>Nope, I can't help unfortunately.  I used Tomcat 4.1 for years
>connecting to Oracle 8i and 9i, and I continue to do so now with Tomcat
>5.0 and 5.5.  Maybe I'm just lucky, but the docs (specifically the JDBC
>DataSources how-to) have always worked for me out of the box.  I've
>never seen the error you describe.
>
>Yoav Shapira
>Millennium Research Informatics
>
>
>>-----Original Message-----
>>From: Shilpa Nalgonda [mailto:snalgonda@mypublisher.com]
>>Sent: Wednesday, September 22, 2004 10:44 AM
>>To: Tomcat Users List
>>Subject: RE: Tomcat 4.1 Connection Pooling...
>>
>>Hi Yoav Shapira,
>>Can you put some light on this pooling stuff...
>>Thanks.
>>Shilpa.
>>
>>-----Original Message-----
>>From: Shilpa Nalgonda [mailto:snalgonda@mypublisher.com]
>>Sent: Wednesday, September 22, 2004 9:31 AM
>>To: Tomcat Users List
>>Subject: RE: Tomcat 4.1 Connection Pooling...
>>
>>
>>Hi Cary,
>>I am running my application on both windowsxp and Linux. And my Oracle
>>version is 8i.
>>I have the same problem on both OS.  I think increasing the number of
>>processes would not help.
>>This has got something to do with Tomcat connection pooling
>configuration.
>>I am missing some configuration stuff there...
>>if i use these below parameters in server.xml iget timeout
>exception...just
>>after couple of requests..
>>maxActive :20
>>maxIdle :10
>>mxWait :10000
>>removeAbandoned :true
>>"org.apache.commons.dbcp.SQLNestedException: Cannot get a connection,
>pool
>>exhausted, cause:
>>java.util.NoSuchElementException: Timeout waiting for idle object "
>>
>>And if i use this below configuration i get ORA:00020 exception...
>>maxActive :0
>>maxIdle :0
>>mxWait :0
>>removeAbandoned :true
>>
>>Can you please help---i have been looking into this since 2 days and
>still
>>it doesn't work...
>>
>>-----Original Message-----
>>From: Cary Conover [mailto:tcqcary@yahoo.com]
>>Sent: Tuesday, September 21, 2004 10:09 PM
>>To: Tomcat Users List
>>Subject: RE: Tomcat 4.1 Connection Pooling...
>>
>>
>>Shilpa,
>>
>>What OS are you running this configuration on?  If it is AIX I would
>>investigate to see how the system is configured for the number of
>processes
>>per user on the system.  If it is configured as a Workstation it is
>>defaulted to 128 processes / login.  If it is configured as a server
it
>is
>>set to 500 processes / login.  Plus Oracle support site suggests in
the
>>neighborhood of 2500 processes / login for Oracle 9i to function well
>if
>>you
>>are running 9i.  These are all system settings that can be found in
>smitty
>>on the system and adjusted as root user.
>>
>>Hope this helps,
>>
>>Cary
>>
>>Shilpa Nalgonda <sn...@mypublisher.com> wrote:
>>Can someone please suggest how to achieve connection Pooling in tomcat
>4.1.
>>As per the docs i have
>>1) configured server.xml to include the resource parameters (
>datasource,
>>connection pool size etc)
>>2) In application code , retrieve connection using datasource
>>3) Every Method call to database retrieves connection
>>using datasource.getConnection ()
>>and closes connection everytime
>>
>>But still the pooling is not achieved, i get ORA-00020 error( maximim
>>proceses exceeded), i increased the size from 30 to 200) even then it
>is
>>not
>>working.
>>
>>Can someone please help----
>>
>>-----Original Message-----
>>From: Shilpa Nalgonda [mailto:snalgonda@mypublisher.com]
>>Sent: Monday, September 20, 2004 12:55 PM
>>To: Tomcat Users List
>>Subject: org.apache.commons.dbcp.SQLNestedException: Cannot get a
>>connection, pool exhausted, cause:
>>
>>
>>Hi, I am getting the timeout exception for connection pooling, i am
>using
>>Tomca 4.1 and datasource to retrieve connections.
>>I am attaching all the soure code and configuration files used in my
>>application, please suggest where iam doing wrong...
>>
>>SEVERE: getConnection()--SQLException
>>org.apache.commons.dbcp.SQLNestedException: Cannot get a connection,
>pool
>>exhausted, cause:
>>java.util.NoSuchElementException: Timeout waiting for idle object
>>at
>>org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObj
e
>ctPo
>>o
>>l.java:801)
>>at
>>org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSou
r
>ce.j
>>a
>>va:140)
>>at
>>org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.
j
>ava:
>>5
>>18)
>>at
>>com.mypublisher.oemapi.DAO.DBAccess.getConnection(DBAccess.java:47)
>>at com.mypublisher.oemapi.DAO.Persister.(Persister.java:46)
>>at
>>com.mypublisher.oemapi.SubmitOrder.SubmitOrder(SubmitOrder.java:61)
>>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>at
>>sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.j
a
>va:3
>>9
>>)
>>at
>>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccess
o
>rImp
>>l
>>.java:25)
>>at java.lang.reflect.Method.invoke(Method.java:324)
>>at org.apache.xmlrpc.Invoker.execute(Invoker.java:168)
>>at
>>org.apache.xmlrpc.XmlRpcWorker.invokeHandler(XmlRpcWorker.java:123)
>>at org.apache.xmlrpc.XmlRpcWorker.execute(XmlRpcWorker.java:185)
>>at org.apache.xmlrpc.XmlRpcServer.execute(XmlRpcServer.java:151)
>>at org.apache.xmlrpc.XmlRpcServer.execute(XmlRpcServer.java:128)
>>at
>>com.mypublisher.oemapi.xmlrpc.XmlRpcServlet.doPost(XmlRpcServlet.java
>>======================================================================
=
>====
>>=
>>===========
>>server.xml
>>---------
>>xmlrpc-oemapi-->
>>debug="5" reloadable="true" crossContext="true" useNaming="true">
>>
>>prefix="localhost_rpcoemapi_log." suffix=".txt"
>>timestamp="true"/>
>>auth="Container"
>>type="javax.sql.DataSource"/>
>>
>>
>>
>>
>>factory
>>org.apache.commons.dbcp.BasicDataSourceFactory
>>
>>
>>
>>         configure your mysqld max_connections large enough to handle
>>         all of your db connections. Set to 0 for no limit.
>>         -->
>>
>>
>>maxActive
>>5
>>
>>
>>
>>         Set to 0 for no limit.
>>         -->
>>
>>
>>maxIdle
>>2
>>
>>
>>
>>         in ms, in this example 10 seconds. An Exception is thrown if
>>         this timeout is exceeded.  Set to -1 to wait indefinitely.
>>         -->
>>
>>
>>maxWait
>>10000
>>
>>
>>
>>
>>
>>
>>username
>>ioeadmin
>>
>>
>>
>>
>>password
>>ioeadmin
>>
>>
>>
>>
>>
>>
>>driverClassName
>>oracle.jdbc.driver.OracleDriver
>>
>>
>>
>>         The autoReconnect=true argument to the url makes sure that
the
>>         mm.mysql JDBC Driver will automatically reconnect if mysqld
>closed
>>the
>>         connection.  mysqld by default closes idle connections after
8
>>hours.
>>         -->
>>
>>
>>url
>>jdbc:oracle:thin:@ipaddress:1521:MYDB
>>
>>
>>
>>
>>
>>======================================================================
=
>====
>>=
>>===================================
>>DatasourceFactory is a singleton class used to retrieve the datasource
>from
>>tomcat using JNDi..and connection is obtained from datasource...
>>public static DataSource getInstance() throws SystemException
>>{
>>if (!isDataSrcAvaliable)
>>{
>>if (dataSource == null)
>>{
>>new DataSourceFactory();
>>doLookUp();
>>isDataSrcAvaliable = true;
>>} //end if (dataSource == null)
>>}// end if (!isDataSrcAvaliable)
>>return dataSource;
>>} /* end getInstance() */
>>
>>doLookUp method does this:
>>Context ctx = new InitialContext();
>>String dataSrc =
>>msgResource.getMessage(OEMAPIConstants.DATA_SOURCE_NAME);
>>Context env = (Context)ctx.lookup("java:comp/env");
>>dataSource = (DataSource) env.lookup(dataSrc);
>>
>>
>>public static Connection getConnection() throws DAOException
>>{
>>DataSource ds = (DataSource) DataSourceFactory.getInstance();
>>Connection con = ds.getConnection();
>>return ds.getConnection();
>>}
>>and every database lookup class, gets this connection and closes the
>>connection after the query to database...
>>
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
>>For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
>>For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
>>
>>
>>
>>
>>
>>---------------------------------
>>Do you Yahoo!?
>>New and Improved Yahoo! Mail - Send 10MB messages!
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
>>For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
>>For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
>
>
>
>
>This e-mail, including any attachments, is a confidential business
>communication, and may contain information that is confidential,
>proprietary
>and/or privileged.  This e-mail is intended only for the individual(s)
to
>whom it is addressed, and may not be saved, copied, printed, disclosed
or
>used by anyone else.  If you are not the(an) intended recipient, please
>immediately delete this e-mail from your computer system and notify the
>sender.  Thank you.
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: tomcat-user-help@jakarta.apache.org




This e-mail, including any attachments, is a confidential business
communication, and may contain information that is confidential, proprietary
and/or privileged.  This e-mail is intended only for the individual(s) to
whom it is addressed, and may not be saved, copied, printed, disclosed or
used by anyone else.  If you are not the(an) intended recipient, please
immediately delete this e-mail from your computer system and notify the
sender.  Thank you.


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


RE: removeAbandoned in DBCP

Posted by Shilpa Nalgonda <sn...@mypublisher.com>.
Hi Robert,
when you said "I have both parameters in my pool definition and they work
fine. "


How did you define the pool , is it by using BasicDataSourceFactory or
somthing else...

	<parameter>
      	  <name>factory</name>
      	  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    	</parameter>

I reason i am asking is i still don't understand how pooling is achieved...

BasicDataSourcefactory creates BasicDatasource and when you use the below
code the datasource obtained is basicdatasource.
Context ctx = new InitialContext();
            String dataSrc =
msgResource.getMessage(OEMAPIConstants.DATA_SOURCE_NAME);
            Context env = (Context)ctx.lookup("java:comp/env");
            dataSource = (DataSource) env.lookup(dataSrc);
            Connection con = dataSource.getConnection();

Datasource.getConnection gives java.sql.Connection object..so i am not sure
how the Connection is a poolable connection...










riginal Message-----
From: Robert Bateman [mailto:bobbateman@sequoiallc.com]
Sent: Wednesday, September 22, 2004 3:59 PM
To: Tomcat Users List
Subject: Re: removeAbandoned in DBCP


On Wednesday 22 September 2004 03:28 pm, Shilpa Nalgonda wrote:
> Hi,
> My connection pool works if i set the removeAbandon parameter to true, but
> i still do not understand why it works that way,
> can someone suggest...can i use that parameter...
>
> <parameter>
>           <name>removeAbandoned</name>
>           <value>true</value>
> </parameter>
> <parameter>
>             <name>removeAbandonedTimeout</name>
>             <value>0</value>
> </parameter>
>

I have both parameters in my pool definition and they work fine.  I did set
my
Timeout a bit bigger though.  In my prod. TC app, I have set (for MySQL,
ymmv):

<!-- Maximum number of dB connections in pool. Make sure you
	 configure your mysqld max_connections large enough to handle
	 all of your db connections. Set to 0 for no limit. -->
<parameter>
	<name>maxActive</name>
	<value>100</value>
</parameter>
<!-- Maximum time to wait for a dB connection to become available
	 in ms, in this example 15 seconds. An Exception is thrown if
	 this timeout is exceeded.  Set to -1 to wait indefinitely. -->
<parameter>
	<name>maxWait</name>
	<value>15000</value>
</parameter>
<!-- Validation Query to insure our connection is still valid. -->
<parameter>
	<name>validationQuery</name>
	<value>SELECT version()</value>
</parameter>
<!-- Make sure we test each and every connection before we borrow
	 it to see if it is still valid. -->
<parameter>
	<name>testOnBorrow</name>
	<value>true</value>
</parameter>
<!-- Maximum number of idle dB connections to retain in pool.
	 Set to 0 for no limit. -->
<parameter>
	<name>maxIdle</name>
	<value>100</value>
</parameter>
<parameter>
	<name>removeAbandoned</name>
	<value>true</value>
</parameter>
<!--Use the removeAbandonedTimeout parameter / seconds.-->
<parameter>
	<name>removeAbandonedTimeout</name>
	<value>60</value>
</parameter>
<parameter>
	<name>logAbandoned</name>
	<value>true</value>
</parameter>

Also, I noticed on my last app that I was forgetting to release the pooled
connection and I eventually ran out of entries.  You might want to double
check you are releasing/closing your connection.

Bob

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


RE: removeAbandoned in DBCP

Posted by Shilpa Nalgonda <sn...@mypublisher.com>.
Thanks a lot for the reply.  I am releasing all the connections and other
resources in my entire application.
I am using Tomcat4.1.30 and Oracle 8i..
But i have one question though,
does
Connection con = dataSource.getConnection();
 ensures that we are creating connection pool and getting connection from
the pool?????
i noticed that there are several classes in DBCp like Pooled Connection
etc., can we use those ...

-----Original Message-----
From: Robert Bateman [mailto:bobbateman@sequoiallc.com]
Sent: Wednesday, September 22, 2004 3:59 PM
To: Tomcat Users List
Subject: Re: removeAbandoned in DBCP


On Wednesday 22 September 2004 03:28 pm, Shilpa Nalgonda wrote:
> Hi,
> My connection pool works if i set the removeAbandon parameter to true, but
> i still do not understand why it works that way,
> can someone suggest...can i use that parameter...
>
> <parameter>
>           <name>removeAbandoned</name>
>           <value>true</value>
> </parameter>
> <parameter>
>             <name>removeAbandonedTimeout</name>
>             <value>0</value>
> </parameter>
>

I have both parameters in my pool definition and they work fine.  I did set
my
Timeout a bit bigger though.  In my prod. TC app, I have set (for MySQL,
ymmv):

<!-- Maximum number of dB connections in pool. Make sure you
	 configure your mysqld max_connections large enough to handle
	 all of your db connections. Set to 0 for no limit. -->
<parameter>
	<name>maxActive</name>
	<value>100</value>
</parameter>
<!-- Maximum time to wait for a dB connection to become available
	 in ms, in this example 15 seconds. An Exception is thrown if
	 this timeout is exceeded.  Set to -1 to wait indefinitely. -->
<parameter>
	<name>maxWait</name>
	<value>15000</value>
</parameter>
<!-- Validation Query to insure our connection is still valid. -->
<parameter>
	<name>validationQuery</name>
	<value>SELECT version()</value>
</parameter>
<!-- Make sure we test each and every connection before we borrow
	 it to see if it is still valid. -->
<parameter>
	<name>testOnBorrow</name>
	<value>true</value>
</parameter>
<!-- Maximum number of idle dB connections to retain in pool.
	 Set to 0 for no limit. -->
<parameter>
	<name>maxIdle</name>
	<value>100</value>
</parameter>
<parameter>
	<name>removeAbandoned</name>
	<value>true</value>
</parameter>
<!--Use the removeAbandonedTimeout parameter / seconds.-->
<parameter>
	<name>removeAbandonedTimeout</name>
	<value>60</value>
</parameter>
<parameter>
	<name>logAbandoned</name>
	<value>true</value>
</parameter>

Also, I noticed on my last app that I was forgetting to release the pooled
connection and I eventually ran out of entries.  You might want to double
check you are releasing/closing your connection.

Bob

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: removeAbandoned in DBCP

Posted by Robert Bateman <bo...@sequoiallc.com>.
On Wednesday 22 September 2004 03:28 pm, Shilpa Nalgonda wrote:
> Hi,
> My connection pool works if i set the removeAbandon parameter to true, but
> i still do not understand why it works that way,
> can someone suggest...can i use that parameter...
>
> <parameter>
>           <name>removeAbandoned</name>
>           <value>true</value>
> </parameter>
> <parameter>
>             <name>removeAbandonedTimeout</name>
>             <value>0</value>
> </parameter>
>

I have both parameters in my pool definition and they work fine.  I did set my 
Timeout a bit bigger though.  In my prod. TC app, I have set (for MySQL, 
ymmv):

<!-- Maximum number of dB connections in pool. Make sure you
	 configure your mysqld max_connections large enough to handle
	 all of your db connections. Set to 0 for no limit. -->
<parameter>
	<name>maxActive</name>
	<value>100</value>
</parameter>
<!-- Maximum time to wait for a dB connection to become available
	 in ms, in this example 15 seconds. An Exception is thrown if
	 this timeout is exceeded.  Set to -1 to wait indefinitely. -->
<parameter>
	<name>maxWait</name>
	<value>15000</value>
</parameter>
<!-- Validation Query to insure our connection is still valid. -->
<parameter>
	<name>validationQuery</name>
	<value>SELECT version()</value>
</parameter>
<!-- Make sure we test each and every connection before we borrow
	 it to see if it is still valid. -->
<parameter>
	<name>testOnBorrow</name>
	<value>true</value>
</parameter>
<!-- Maximum number of idle dB connections to retain in pool.
	 Set to 0 for no limit. -->
<parameter>
	<name>maxIdle</name>
	<value>100</value>
</parameter>
<parameter>
	<name>removeAbandoned</name>
	<value>true</value>
</parameter>
<!--Use the removeAbandonedTimeout parameter / seconds.-->
<parameter>
	<name>removeAbandonedTimeout</name>
	<value>60</value>
</parameter>
<parameter>
	<name>logAbandoned</name>
	<value>true</value>
</parameter>

Also, I noticed on my last app that I was forgetting to release the pooled  
connection and I eventually ran out of entries.  You might want to double 
check you are releasing/closing your connection.

Bob

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org