When using IBATIS with OSCache getting "Closed Connection" when using proxy connections and closing ---------------------------------------------------------------------------------------------------
Key: IBATIS-539 URL: https://issues.apache.org/jira/browse/IBATIS-539 Project: iBatis for Java Issue Type: Bug Components: SQL Maps Affects Versions: 2.3.0 Environment: Microsoft Windows XP Professional, Oracle 10g, BEA Weblogic 10, Reporter: George H. Marvin Fix For: 2.3.3, 2.3.2, 2.3.1, 2.3.0 When an IBATIS Query is run without CACHING, connections are properly closed and everything runs fine. When caching is activated, the first query executes properly, there is a close() issued to the proxy connection, a new proxy connection is obtained and the second query aborts in OracleStatement.ensureOpen(). The last IBATIS class executed is PreparedStatementLogProxy (line 62). The following is an example of the code I am talking about: public void getReference(VOCSCommand cmd) { List<?> results = null; Map<?, ?> paramList = cmd.params; Connection proxyConn=null; try { BaseVO baseVo = cmd.basevo; logger.debug("userid=" + baseVo.getUserCredentials().getUserId()); logger.debug("password=" + baseVo.getUserCredentials().getPassword()); proxyConn = getProxyConnection(baseVo); smc.setUserConnection(proxyConn); results = smc.queryForList(cmd.cmdName.trim(), paramList); // proxyConn.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (proxyConn != null) { try { logger.debug("Error closing proxyConn - [getReference]"); proxyConn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } if (results != null) cmd.result.addAll(results); } I get the following results for 2 executions: 2008-09-30 15:34:24,262 INFO [common.DCapesObjectFactory] - BEGIN: loading Spring config:DCAPES_DYNAMIC_DEFS 2008-09-30 15:34:27,921 DEBUG [base.Config] - OSCache: Config called 2008-09-30 15:34:27,921 INFO [base.Config] - OSCache: Getting properties from URL file:/C:/gmarvin_ts_Spiral2/dcapes_lc/dcapes/dcapes-dms/classes/oscache.properties for the default configuration 2008-09-30 15:34:27,952 INFO [base.Config] - OSCache: Properties read {cache.capacity=100000, cache.event.listeners=SimpleStatisticListenerImpl} 2008-09-30 15:34:27,952 DEBUG [base.AbstractCacheAdministrator] - Constructed AbstractCacheAdministrator() 2008-09-30 15:34:27,952 INFO [general.GeneralCacheAdministrator] - Constructed GeneralCacheAdministrator() 2008-09-30 15:34:27,952 INFO [general.GeneralCacheAdministrator] - Creating new cache 2008-09-30 15:34:28,015 INFO [SimpleStatisticListenerImpl] - Creation of SimpleStatisticListenerImpl 2008-09-30 15:34:28,765 DEBUG [vocs.VoCacheDDMSImpl] - In VoCacheDDMSImpl... 2008-09-30 15:34:28,906 INFO [common.DCapesObjectFactory] - END: loading Spring config:DCAPES_DYNAMIC_DEFS 2008-09-30 15:34:28,906 DEBUG [vocs.VoCacheCloseProblemTest] - testInvokeService 2008-09-30 15:34:29,516 DEBUG [vocs.VoCacheDDMSImpl] - userid=billbinz 2008-09-30 15:34:29,516 DEBUG [vocs.VoCacheDDMSImpl] - password=bil6bil! 2008-09-30 15:34:30,313 DEBUG [sql.Connection] - {conn-100000} Connection 2008-09-30 15:34:30,344 DEBUG [algorithm.AbstractConcurrentReadCache] - get called (key=748120546|-1124938390|AEQ%|%|getServSiteLookupInfo|11512063| select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? |executeQueryForList|0|-999999) 2008-09-30 15:34:30,344 DEBUG [algorithm.AbstractConcurrentReadCache] - persistRetrieve called (key=748120546|-1124938390|AEQ%|%|getServSiteLookupInfo|11512063| select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? |executeQueryForList|0|-999999) 2008-09-30 15:34:30,344 DEBUG [base.Cache] - No cache entry exists for key='748120546|-1124938390|AEQ%|%|getServSiteLookupInfo|11512063| select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? |executeQueryForList|0|-999999', creating 2008-09-30 15:34:30,360 DEBUG [SimpleStatisticListenerImpl] - accessed 2008-09-30 15:34:30,360 DEBUG [SimpleStatisticListenerImpl] - ACCESS : MISS: 748120546|-1124938390|AEQ%|%|getServSiteLookupInfo|11512063| select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? |executeQueryForList|0|-999999 2008-09-30 15:34:30,360 DEBUG [SimpleStatisticListenerImpl] - STATISTIC : Hit = 0, stale hit =0, miss = 1 2008-09-30 15:34:30,360 DEBUG [cache.CacheModel] - Cache 'ServSiteLookupVO.ServSiteLookupVO-cache': cache miss 2008-09-30 15:34:30,391 DEBUG [sql.Connection] - {conn-100000} Preparing Statement: select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? 2008-09-30 15:34:31,079 DEBUG [sql.PreparedStatement] - {pstm-100001} Executing Statement: select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? 2008-09-30 15:34:31,079 DEBUG [sql.PreparedStatement] - {pstm-100001} Parameters: [AEQ%, %] 2008-09-30 15:34:31,079 DEBUG [sql.PreparedStatement] - {pstm-100001} Types: [java.lang.String, java.lang.String] 2008-09-30 15:34:31,142 DEBUG [sql.ResultSet] - {rset-100002} ResultSet 2008-09-30 15:34:31,204 DEBUG [sql.ResultSet] - {rset-100002} Header: [GLC_CD, GLC_NM] 2008-09-30 15:34:31,204 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQA, ALFORDSVILLE] 2008-09-30 15:34:31,204 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQB, ALFRED] 2008-09-30 15:34:31,204 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQC, ALFRED] 2008-09-30 15:34:31,204 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQD, ALFRED STATION] 2008-09-30 15:34:31,204 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQE, ALFREDO VASQUEZ C] 2008-09-30 15:34:31,204 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQF, ALFRED] 2008-09-30 15:34:31,204 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQG, ALFRED] 2008-09-30 15:34:31,220 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQH, ALEGRETE] 2008-09-30 15:34:31,220 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQJ, ALGENRODT] 2008-09-30 15:34:31,220 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQK, ALEGRETE NOVO] 2008-09-30 15:34:31,220 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQM, ALGER-HOUARI BOUM] 2008-09-30 15:34:31,220 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQN, ALFRED 01] 2008-09-30 15:34:31,220 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQQ, ALGIERS] 2008-09-30 15:34:31,220 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQS, ALGHERO] 2008-09-30 15:34:31,220 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQT, ALGECIRAS] 2008-09-30 15:34:31,235 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQU, ALGIERS] 2008-09-30 15:34:31,235 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQV, ALGER] 2008-09-30 15:34:31,235 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQW, ALEKSANDROVSK SAK] 2008-09-30 15:34:31,235 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQX, ALGHERO] 2008-09-30 15:34:31,235 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQY, ALFONSO LOPEZ PUM] 2008-09-30 15:34:31,235 DEBUG [sql.ResultSet] - {rset-100002} Result: [AEQZ, ALFTAVER] 2008-09-30 15:34:31,251 DEBUG [algorithm.AbstractConcurrentReadCache] - get called (key=748120546|-1124938390|AEQ%|%|getServSiteLookupInfo|11512063| select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? |executeQueryForList|0|-999999) 2008-09-30 15:34:31,251 DEBUG [algorithm.AbstractConcurrentReadCache] - persistRetrieve called (key=748120546|-1124938390|AEQ%|%|getServSiteLookupInfo|11512063| select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? |executeQueryForList|0|-999999) 2008-09-30 15:34:31,251 DEBUG [base.Cache] - No cache entry exists for key='748120546|-1124938390|AEQ%|%|getServSiteLookupInfo|11512063| select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? |executeQueryForList|0|-999999', creating 2008-09-30 15:34:31,251 DEBUG [algorithm.AbstractConcurrentReadCache] - persistStore called (key=748120546|-1124938390|AEQ%|%|getServSiteLookupInfo|11512063| select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? |executeQueryForList|0|-999999) 2008-09-30 15:34:31,251 DEBUG [algorithm.AbstractConcurrentReadCache] - persistRetrieveGroup called (groupName=ServSiteLookupVO.ServSiteLookupVO-cache) 2008-09-30 15:34:31,251 DEBUG [algorithm.AbstractConcurrentReadCache] - persistStoreGroup called (groupName=ServSiteLookupVO.ServSiteLookupVO-cache) 2008-09-30 15:34:31,267 DEBUG [SimpleStatisticListenerImpl] - cacheEntryAdded 2008-09-30 15:34:31,267 DEBUG [cache.CacheModel] - Cache 'ServSiteLookupVO.ServSiteLookupVO-cache': stored object '[EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED]' 2008-09-30 15:34:31,267 DEBUG [vocs.VoCacheDDMSImpl] - Error closing proxyConn - [getReference] [servSite]=AEQA [servSiteDescription]=ALFORDSVILLE [servSite]=AEQB [servSiteDescription]=ALFRED [servSite]=AEQC [servSiteDescription]=ALFRED [servSite]=AEQD [servSiteDescription]=ALFRED STATION [servSite]=AEQE [servSiteDescription]=ALFREDO VASQUEZ C [servSite]=AEQF [servSiteDescription]=ALFRED [servSite]=AEQG [servSiteDescription]=ALFRED [servSite]=AEQH [servSiteDescription]=ALEGRETE [servSite]=AEQJ [servSiteDescription]=ALGENRODT [servSite]=AEQK [servSiteDescription]=ALEGRETE NOVO [servSite]=AEQM [servSiteDescription]=ALGER-HOUARI BOUM [servSite]=AEQN [servSiteDescription]=ALFRED 01 [servSite]=AEQQ [servSiteDescription]=ALGIERS [servSite]=AEQS [servSiteDescription]=ALGHERO [servSite]=AEQT [servSiteDescription]=ALGECIRAS [servSite]=AEQU [servSiteDescription]=ALGIERS [servSite]=AEQV [servSiteDescription]=ALGER [servSite]=AEQW [servSiteDescription]=ALEKSANDROVSK SAK [servSite]=AEQX [servSiteDescription]=ALGHERO [servSite]=AEQY [servSiteDescription]=ALFONSO LOPEZ PUM [servSite]=AEQZ [servSiteDescription]=ALFTAVER 2008-09-30 15:34:31,282 DEBUG [vocs.VoCacheDDMSImpl] - userid=billbinz 2008-09-30 15:34:31,282 DEBUG [vocs.VoCacheDDMSImpl] - password=bil6bil! 2008-09-30 15:34:31,423 DEBUG [sql.Connection] - {conn-100003} Connection 2008-09-30 15:34:31,423 DEBUG [algorithm.AbstractConcurrentReadCache] - get called (key=1869442161|-1126941579|B%|%|getServSiteLookupInfo|11512063| select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? |executeQueryForList|0|-999999) 2008-09-30 15:34:31,423 DEBUG [algorithm.AbstractConcurrentReadCache] - persistRetrieve called (key=1869442161|-1126941579|B%|%|getServSiteLookupInfo|11512063| select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? |executeQueryForList|0|-999999) 2008-09-30 15:34:31,423 DEBUG [base.Cache] - No cache entry exists for key='1869442161|-1126941579|B%|%|getServSiteLookupInfo|11512063| select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? |executeQueryForList|0|-999999', creating 2008-09-30 15:34:31,423 DEBUG [SimpleStatisticListenerImpl] - accessed 2008-09-30 15:34:31,423 DEBUG [SimpleStatisticListenerImpl] - ACCESS : MISS: 1869442161|-1126941579|B%|%|getServSiteLookupInfo|11512063| select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? |executeQueryForList|0|-999999 2008-09-30 15:34:31,423 DEBUG [SimpleStatisticListenerImpl] - STATISTIC : Hit = 0, stale hit =0, miss = 2 2008-09-30 15:34:31,423 DEBUG [cache.CacheModel] - Cache 'ServSiteLookupVO.ServSiteLookupVO-cache': cache miss 2008-09-30 15:34:31,423 DEBUG [sql.PreparedStatement] - {pstm-100001} Executing Statement: select GLC_CD,GLC_NM from DCAPES_JOPES_REF.S_GEOLOCATION where GLC_CD like ? and GLC_NM like ? 2008-09-30 15:34:31,423 DEBUG [sql.PreparedStatement] - {pstm-100001} Parameters: [B%, %] 2008-09-30 15:34:31,423 DEBUG [sql.PreparedStatement] - {pstm-100001} Types: [java.lang.String, java.lang.String] com.ibatis.common.jdbc.exception.NestedSQLException: --- The error occurred in mil/af/dcapes/ddms/vocs/data/ServSiteLookupVO.xml. --- The error occurred while applying a parameter map. --- Check the ServSiteLookupVO.ServSiteParamMap. --- Check the statement (query failed). --- Cause: java.sql.SQLException: Closed Connection at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:185) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123) at com.ibatis.sqlmap.engine.mapping.statement.CachingStatement.executeQueryForList(CachingStatement.java:97) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:615) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:589) at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118) at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:95) at mil.af.dcapes.ddms.vocs.VoCacheDDMSImpl.getReference(VoCacheDDMSImpl.java:39) at mil.af.dcapes.ddms.vocs.VoCacheDDMSImpl.invokeService(VoCacheDDMSImpl.java:61) at mil.af.dcapes.ddms.vocs.VoCacheCloseProblemTest.closeConnectionTest(VoCacheCloseProblemTest.java:62) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99) at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75) at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45) at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66) at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35) at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) Caused by: java.sql.SQLException: Closed Connection at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) at oracle.jdbc.driver.OracleStatement.ensureOpen(OracleStatement.java:3517) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3297) at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3422) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.ibatis.common.jdbc.logging.PreparedStatementLogProxy.invoke(PreparedStatementLogProxy.java:62) at $Proxy7.execute(Unknown Source) at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:186) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173) ... 29 more 2008-09-30 15:34:31,501 DEBUG [vocs.VoCacheDDMSImpl] - Error closing proxyConn - [getReference] -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.