I did look at this and this but I dont think they quite answer my question.
I have a routine spring web application which uses a connection pool and I use a oracle.jdbc.pool.OracleDataSource
. My datasource actually says,
<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource"
destroy-method="close">
<property name="URL" value="xx"/>
<property name="user" value="xx"/>
<property name="password" value="xx"/>
<property name="connectionCachingEnabled" value="true"/>
<property name="implicitCachingEnabled" value="true"/>
<property name="maxStatements" value="255"/>
<property name="connectionCacheProperties">
<props>
<prop key="initialLimit">10</prop>
</props>
</property>
</bean>
So I have got the destroy-method correct but however after about 10-15 minutes of uptime I get the exception
Caused by: java.sql.SQLException: Io exception: Software caused connection abort: recv failed
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:255)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:976)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3316)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3422)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4394)
Can someone let me know what I am missing here and is there any page where implicitCaching, explicitCaching, connectionCaching are explained? Should I explicitly close/refresh connections?
PS: It would not be preferable to use Oracle 11.x drivers (and I use only Oracle 10.x)