Connection conn = null; Statement stmt = null; // Or PreparedStatement if needed ResultSet rs = null; try { conn = //get connection from connection pool ... stmt = conn.createStatement("select ..."); rs = stmt.executeQuery(); ... iterate through the result set ... rs.close(); rs = null; stmt.close(); stmt = null; conn.close(); // Return to connection pool conn = null; // Make sure we don't close it twice } catch (SQLException e) { ... deal with errors ... } finally { // Always make sure result sets and statements are closed, // and the connection is returned to the pool if (rs != null) { try { rs.close(); } catch (SQLException e) { ; } rs = null; } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { ; } stmt = null; } if (conn != null) { try { conn.close(); } catch (SQLException e) { ; } conn = null; } }
On Tue, 28 Sep 2004 15:28:24 -0400, Phillip Qin <[EMAIL PROTECTED]> wrote: > Even though this resource is not in "Global" scope? > > > > > -----Original Message----- > From: Shapira, Yoav [mailto:[EMAIL PROTECTED] > Sent: September 28, 2004 1:55 PM > To: Tomcat Users List > Subject: RE: Tomcat 4.1 Connection Pooling... > > Hi, > Hmm ;) There's a good reason there's no close method on > javax.sql.DataSource. There's also a good reason the J2EE spec calls for > the container, not the user, to manage the lifecycle of JNDI resources such > as DataSources. IF you go with this ServletContextListener approach to take > over lifecycle management of a server-provided JNDI resource, you'll be in a > murky space at best. > > Yoav Shapira > Millennium Research Informatics > > >-----Original Message----- > >From: Phillip Qin [mailto:[EMAIL PROTECTED] > >Sent: Tuesday, September 28, 2004 1:27 PM > >To: 'Tomcat Users List' > >Subject: RE: Tomcat 4.1 Connection Pooling... > > > >For connecion pooling, when you close the connection, you don't > actually > >close the physical link. After several shutdown/sartup of your > application, > >open connection accumulates and exceeds Oracle's 200 thus you receive > that > >SQLException. > > > >To solve your problem, I would implement a ServletContextListener to > >initialize connection pool when my context is in the initialization > (public > >method contextInitialized) and close data source when my context is > >destroyed (public method contextDestroyed). > > > >If you have defined loadonstartup servlet in your web.xml, in the > destroy > >method, explicitly close your data source. > > > >-----Original Message----- > >From: Shilpa Nalgonda [mailto:[EMAIL PROTECTED] > >Sent: September 28, 2004 1:06 PM > >To: Tomcat Users List > >Subject: RE: Tomcat 4.1 Connection Pooling... > > > > > >I was not aware that i should explicitly close the datasource, but i am > >making sure that i close all the connections by saying Connection.close > in > >the finally block..can you tell me how to close the datasource and > where to > >do that... > > > > > >-----Original Message----- > >From: Phillip Qin [mailto:[EMAIL PROTECTED] > >Sent: Tuesday, September 28, 2004 1:06 PM > >To: 'Tomcat Users List' > >Subject: RE: Tomcat 4.1 Connection Pooling... > > > > > >This error happens when there are too many connections opened. There > are > >too > >many connections opened because before you shut down your application, > you > >don't explicitly close your data source. > > > >-----Original Message----- > >From: Shilpa Nalgonda [mailto:[EMAIL PROTECTED] > >Sent: September 28, 2004 12:55 PM > >To: Tomcat Users List > >Subject: RE: Tomcat 4.1 Connection Pooling... > > > > > >But my application runs fine even with out that entry in web.xml, i am > >using Tomcats ConnectionPooling to connect to database..I only have > scalability > >issue, when i test my application with multiple users i get the ORAcle > erro > >below.. If only one users is there, then there is no problem...can you > >please suggest if adding that entry to web.xml will help... > > > >java.sql.SQLException: ORA-00020: maximum number of processes (200) > >exceeded > > > > at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java) > > at oracle.jdbc.ttc7.O3log.receive1st(O3log.java) > > at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java) > > at > >oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java) > > at > >oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java > ) > > at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java) > > at > >org.apache.commons.dbcp.DriverConnectionFactory.createConnection(Driver > Conn > >e > >ctionFactory.java:82) > > at > >org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableCo > nnec > >t > >ionFactory.java:300) > > at > >org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObje > ctPo > >o > >l.java:816) > > at > >org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjec > tPoo > >l > >.java:119) > > at > >org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSour > 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:43) > > > >-----Original Message----- > >From: Shapira, Yoav [mailto:[EMAIL PROTECTED] > >Sent: Tuesday, September 28, 2004 12:53 PM > >To: Tomcat Users List > >Subject: RE: Tomcat 4.1 Connection Pooling... > > > > > > > >Hi, > >Yes, it's needed if you're using server-provided connection pooling. > Read > >the Servlet Specification. > > > >Yoav Shapira > >Millennium Research Informatics > > > > > >>-----Original Message----- > >>From: Shilpa Nalgonda [mailto:[EMAIL PROTECTED] > >>Sent: Tuesday, September 28, 2004 12:47 PM > >>To: Tomcat Users List > >>Subject: RE: Tomcat 4.1 Connection Pooling... > >> > >>Is it necessary to add this in web.xml, i have configured datasource > >for > >>connectonpool only in server.xml... > >> > >> > >>web.xml > >>----------- > >><resource-ref> > >><res-ref-name>jdbc/myoracle</res-ref-name> > >><res-type>javax.sql.DataSource</res-type> > >><res-auth>Container</res-auth> > >></resource-ref> > >> > >> > >> > >>-----Original Message----- > >>From: Shilpa Nalgonda [mailto:[EMAIL PROTECTED] > >>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:[EMAIL PROTECTED] > >>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:[EMAIL PROTECTED] > >>>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:[EMAIL PROTECTED] > >>>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:[EMAIL PROTECTED] > >>>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 <[EMAIL PROTECTED]> 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:[EMAIL PROTECTED] > >>>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(GenericOb > j > >e > >>ctPo > >>>o > >>>l.java:801) > >>>at > >>>org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSo > u > >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(DelegatingMethodAcces > s > >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: [EMAIL PROTECTED] > >>>For additional commands, e-mail: [EMAIL PROTECTED] > >>> > >>> > >>>--------------------------------------------------------------------- > >>>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>For additional commands, e-mail: [EMAIL PROTECTED] > >>> > >>> > >>> > >>> > >>> > >>>--------------------------------- > >>>Do you Yahoo!? > >>>New and Improved Yahoo! Mail - Send 10MB messages! > >>> > >>> > >>>--------------------------------------------------------------------- > >>>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>For additional commands, e-mail: [EMAIL PROTECTED] > >>> > >>> > >>>--------------------------------------------------------------------- > >>>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>For additional commands, e-mail: [EMAIL PROTECTED] > >> > >> > >> > >> > >>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: [EMAIL PROTECTED] > >>For additional commands, e-mail: [EMAIL PROTECTED] > >> > >> > >>--------------------------------------------------------------------- > >>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>For additional commands, e-mail: [EMAIL PROTECTED] > >> > >> > >>--------------------------------------------------------------------- > >>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > >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: [EMAIL PROTECTED] > >For additional commands, e-mail: [EMAIL PROTECTED] > > > > > >--------------------------------------------------------------------- > >To unsubscribe, e-mail: [EMAIL PROTECTED] > >For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > >--------------------------------------------------------------------- > >To unsubscribe, e-mail: [EMAIL PROTECTED] > >For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > 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: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > !DSPAM:4159a597165394739372390! > > -- ------------------------------------------------------------------ Carlos J, Bracho M. "The significant problems we face cannot be solved at the same level of thinking we were at when we created them." Albert Einstein ------------------------------------------------------------------ e-mail: [EMAIL PROTECTED] MSN: [EMAIL PROTECTED] ------------------------------------------------------------------ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]