Return-Path: X-Original-To: apmail-commons-user-archive@www.apache.org Delivered-To: apmail-commons-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 6719D17A67 for ; Tue, 28 Apr 2015 06:26:59 +0000 (UTC) Received: (qmail 28326 invoked by uid 500); 28 Apr 2015 06:26:58 -0000 Delivered-To: apmail-commons-user-archive@commons.apache.org Received: (qmail 28210 invoked by uid 500); 28 Apr 2015 06:26:58 -0000 Mailing-List: contact user-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Commons Users List" Delivered-To: mailing list user@commons.apache.org Received: (qmail 28199 invoked by uid 99); 28 Apr 2015 06:26:58 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 28 Apr 2015 06:26:58 +0000 X-ASF-Spam-Status: No, hits=2.2 required=5.0 tests=HTML_MESSAGE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: message received from 54.191.145.13 which is an MX secondary for user@commons.apache.org) Received: from [54.191.145.13] (HELO mx1-us-west.apache.org) (54.191.145.13) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 28 Apr 2015 06:26:51 +0000 Received: from e28smtp09.in.ibm.com (e28smtp09.in.ibm.com [122.248.162.9]) by mx1-us-west.apache.org (ASF Mail Server at mx1-us-west.apache.org) with ESMTPS id A2D642022B for ; Tue, 28 Apr 2015 06:26:30 +0000 (UTC) Received: from /spool/local by e28smtp09.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 28 Apr 2015 11:56:28 +0530 Received: from d28dlp01.in.ibm.com (9.184.220.126) by e28smtp09.in.ibm.com (192.168.1.139) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 28 Apr 2015 11:56:25 +0530 Received: from d28relay01.in.ibm.com (d28relay01.in.ibm.com [9.184.220.58]) by d28dlp01.in.ibm.com (Postfix) with ESMTP id 52ADEE0054 for ; Tue, 28 Apr 2015 11:59:07 +0530 (IST) Received: from d28av04.in.ibm.com (d28av04.in.ibm.com [9.184.220.66]) by d28relay01.in.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t3S6QKkd66584632 for ; Tue, 28 Apr 2015 11:56:21 +0530 Received: from d28av04.in.ibm.com (localhost [127.0.0.1]) by d28av04.in.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t3S6QKTj003104 for ; Tue, 28 Apr 2015 11:56:20 +0530 Received: from d23ml172.in.ibm.com (d23ml172.in.ibm.com [9.182.8.78]) by d28av04.in.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id t3S6QKNK003086 for ; Tue, 28 Apr 2015 11:56:20 +0530 In-Reply-To: <5537A2F4.4030304@gmail.com> References: <5537A2F4.4030304@gmail.com> To: "Commons Users List" MIME-Version: 1.0 Subject: Re: [dbcp]Closed Connection or Exhausted Resultset error X-KeepSent: 57905704:DF53AFC2-65257E35:0021A1AF; type=4; name=$KeepSent X-Mailer: IBM Notes Release 9.0.1SHF211 December 19, 2013 Message-ID: From: Rohini T Nagaraj Date: Tue, 28 Apr 2015 11:56:16 +0530 X-MIMETrack: Serialize by Router on d23ml172/23/M/IBM(Release 8.5.3FP6HF1222 | December 16, 2014) at 28/04/2015 11:56:20, Serialize complete at 28/04/2015 11:56:20 Content-Type: multipart/alternative; boundary="=_alternative 00235B9865257E35_=" X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15042806-0033-0000-0000-00000570BD10 X-Virus-Checked: Checked by ClamAV on apache.org --=_alternative 00235B9865257E35_= Content-Type: text/plain; charset="US-ASCII" Hi, We are using the DBCP -org.apache.commons-dbcp-1.2.2.jar for connection pooling. Connection pool is created as shown in below code and had set the connection pool setting (removed evictable time settings). There is no issue in getting a connection. This part of the code works fine. GenericObjectPool connectionPool = new GenericObjectPool(); connectionPool.setMaxActive(25); connectionPool.setMaxIdle(25); connectionPool.setTestOnReturn(false); connectionPool.setTestOnBorrow(true); connectionPool.setTestWhileIdle(false); GenericKeyedObjectPoolFactory statementPoolFactory = new GenericKeyedObjectPoolFactory(null ,-1,GenericKeyedObjectPool.WHEN_EXHAUSTED_FAIL,0,1,dbEndPt.getMaxPreparedStatement()); ConnectionFactory connectionFactory = new DataSourceConnectionFactory(ds); boolean defaultReadOnly = false; CIPoolableConnectionFactory poolableConnectionFactory = new CIPoolableConnectionFactory(connectionFactory,connectionPool,statementPoolFactory,getValidationQuery(dbEndPt),defaultReadOnly, false); PoolingDataSource pds = new DelegatePoolingDataSource(connectionPool); pds.setAccessToUnderlyingConnectionAllowed(true); pds.getConnection(); Later when we run this part of the code , it takes almost 12mins to get the resultset. Since customer has 37k packages ,it might have taken this time. But after that we get the error as Closed Resultset and it does not enter the while loop.This happens only when we use datasource connection pooling. Otherwise this part of the code works fine in a standalone program and takes 10mins to get the resultset.Please suggest us connection pool settings to handle the 37k packages on the Oracle side.Thanks. ResultSet rs = metaData.getProcedureColumns(package_name, schema, storedProcedure, null ); logger.warning("Got resultset.Is ResultSet closed = " +rs.isClosed()+"\n"); if (rs != null){ logger.warning("rs is not equal to NULL.Is ResultSet closed = "+rs.isClosed()+"\n"); while( rs.next() ) { //code to get the params } ERROR: Apr 27, 2015 9:17:36 AM com.approuter.framework.util.ResourceBundleHelper getString WARNING: Could not find the resource menu.edit.label in bundle: orchestration using the resource bundle service. Fallback to old style Apr 27, 2015 9:29:07 AM com.approuter.studio.connectors.database.util.DBHelper getStoredProcedureMetaData WARNING: Got resultset.Is ResultSet closed = false Apr 27, 2015 9:29:07 AM com.approuter.studio.connectors.database.util.DBHelper getStoredProcedureMetaData WARNING: rs is not equal to NULL.Is ResultSet closed = true java.sql.SQLException: Closed Resultset: next at oracle.jdbc.driver.InsensitiveScrollableResultSet.next(InsensitiveScrollableResultSet.java:565) at com.approuter.studio.connectors.database.util.DBHelper.getStoredProcedureMetaData(DBHelper.java:1052)//this line points to the whileloop Thanks and Regards, Rohini T Nagaraj, WebSphere CastIron QA Team, IBM INDIA PRIVATE LIMITED, DC1-3A-003,DLF IT PARK,Chennai - 600089 Extn # : 21820 and Mobile #: 9962020675 From: Phil Steitz To: Commons Users List Date: 04/22/2015 07:03 PM Subject: Re: [dbcp]Closed Connection or Exhausted Resultset error On 4/22/15 5:18 AM, Rohini T Nagaraj wrote: > Hi All, > > The Oracle DB has 37k packages. The issue is seen after running the below > query from the program or when using > DatabaseMetadata.getProcedureColumns() in a program . We are seeing these > errors "Exhausted Resultset (SQL Code =99999 and vendor code=17,011) " or > "Closed Connection :next (SQL code=08003 , Vendor code=17,008)". Please post a stack trace showing one or both of these errors. > > Something happening to connection or resultset getting closed after > running the query/getProcedureColumns call. We have investigated further > and see this issue of Exhausted Resultset/Connection getting closed only > when we use the datasource connection pool logic. > When we run a standalone java program with the query/getProcedureColumns > call , it took 10mins for the customer to get the output and there were no > issues.We want the same behavior with datasource connection pool logic . > > > We are using Tomcat sevrer and > org.apache.commons.pool.impl.GenericObjectPool connection pool.We have > these connection pool settings done. Are you using DBCP or are you just trying to pool the connections manually using Commons Pool? What version of pool and / or DBCP? How exactly are you creating the connection pool? > > connectionPool.setMaxActive(25); > connectionPool.setMaxIdle(1); > connectionPool.setMinEvictableIdleTimeMillis(120000); > connectionPool.setTimeBetweenEvictionRunsMillis(1000); > connectionPool.setTestOnReturn(false); > connectionPool.setTestOnBorrow(true); > connectionPool.setTestWhileIdle(false); Why do you have maxIdle set to 1? That is going to cause connections to get closed when they are returned whenever there is one idle connection already in the pool. This will effectively defeat the purpose of the pool. Also, with such rigid control on idle connections, why do you also have the evictor configured to run? Every second? Unless you have special reasons for these settings, I would change maxIdle to 25 and drop the minEvictableIdleTimeMillis and timeBetweenEvictionRunsMillis (default will be to have no evictor runs). > > Hence please let us know if there is any fine tuning to be done to make > query or DatabaseMetadata.getProcedureColumns() to work when we use > datasource connection pool logic.Please suggest us any other timeout or if > there is anything else which can help us in this scenario.Thanks > > > SQL QUERY : > SELECT * FROM SYS.ALL_ARGUMENTS WHERE PACKAGE_NAME = 'PKG_TEST' AND > OBJECT_NAME = 'PRC_INSERT' AND OWNER = 'APPS' ORDER BY SEQUENCE > > ERROR: > java.sql.SQLRecoverableException: Closed Connection: next > at > oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:233) > > > > Thanks and Regards, > Rohini T Nagaraj, > WebSphere CastIron QA Team, > IBM INDIA PRIVATE LIMITED, > DC1-3A-003,DLF IT PARK,Chennai - 600089 > Extn # : 21820 and Mobile #: 9962020675 --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscribe@commons.apache.org For additional commands, e-mail: user-help@commons.apache.org --=_alternative 00235B9865257E35_=--