You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by Hi...@ext.cec.eu.int on 2006/03/14 09:20:33 UTC

Connection reset Oracle error

Hello,

I'm using Ibatis with Spring and everything works ok. The problem I have for
the moment is that in our production server when they stop and restarts
Oracle for backup proposes then my application loses the connection and is
not able anymore to use the connection, we then need to reload it to work
again. Here is an example of a DAO bean in the applicationContex file :

<bean id="dataSource" class="db.DataSourceApplication" init-method="init"
destroy-method="close">
		<property name="jdbcConnectionProperties"><ref
bean="SqlMapClientProperties10"/>
		</property>
	</bean>
	
	<bean id="sqlMapClient10"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocation">
			<value>classpath:SqlMapConfig.xml</value>
		</property>
	</bean>

	<bean id="countryDao" class="daoImpl.SqlMapClientCountry">
		<property name="dataSource"><ref
local="dataSource"/></property>
		<property name="sqlMapClient"><ref
local="sqlMapClient10"/></property>
	</bean>

The SqlMapConfig file only contains the following :

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
    PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
    "http://www.ibatis.com/dtd/sql-map-config-2.dtd
<http://www.ibatis.com/dtd/sql-map-config-2.dtd> ">

<sqlMapConfig>

<settings
    cacheModelsEnabled="false"
    enhancementEnabled="true"
    lazyLoadingEnabled="true"
    errorTracingEnabled="true"
    maxRequests="250"
    maxSessions="150"
    maxTransactions="30"
    useStatementNamespaces="false"
    />

	<sqlMap resource="Ibatis/maps/Country.xml"/>

</sqlMapConfig>

My DataSourceApplication class contains the database connection details and
extends the BasicDataSource:

public class DataSourceApplication extends BasicDataSource {

	private ConfigEngineAppToProperties jdbcConnectionProperties;

	final public void setJdbcConnectionProperties(
			ConfigEngineAppToProperties props) {
		jdbcConnectionProperties = props;

	}

	final public void init() throws RemoteException,SQLException {

		String driver = (String)
jdbcConnectionProperties.get("driver");
		String url = (String) jdbcConnectionProperties.get("url");
		String username = (String)
jdbcConnectionProperties.get("username");
		String password = (String)
jdbcConnectionProperties.get("password");
		
		
			super.setDriverClassName(driver);
			super.setUrl(url);
			super.setUsername(username);
			super.setPassword(password);
		
	}

		
}

Does anyone know how I can catch this problem and prevent the stop/start of
Oracle of stopping my application. I would like that my application can
catch this error and waits until Oracle is up again.The error I get is the
following :

 WARN [org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator]
- <Unable to translate SQLException with errorCode '17002', will now try the
fallback translator>
 ERROR [org.springframework.jdbc.datasource.DataSourceUtils] - <Could not
close JDBC connection>
java.sql.SQLException: Already closed.

After that every quey called has the following error :

 Cause: java.sql.SQLException: Io exception: Connection reset>

The only way to have it working again is by reloading the application in
Tomcat 5.


Thank you,

Hilde

Re: Connection reset Oracle error

Posted by Larry Meadors <lm...@apache.org>.
You'll probably need to use a ping query to make sure that the
connection is valid before returning it.

The BasicDataSource class has that code in it.

Larry


On 3/14/06, Hilde.DE-GRAEVE@ext.cec.eu.int
<Hi...@ext.cec.eu.int> wrote:
>
>
> Hello,
>
> I'm using Ibatis with Spring and everything works ok. The problem I have for
> the moment is that in our production server when they stop and restarts
> Oracle for backup proposes then my application loses the connection and is
> not able anymore to use the connection, we then need to reload it to work
> again. Here is an example of a DAO bean in the applicationContex file :
>
> <bean id="dataSource" class="db.DataSourceApplication" init-method="init"
> destroy-method="close">
>                 <property
> name="jdbcConnectionProperties"><ref
> bean="SqlMapClientProperties10"/>
>                 </property>
>         </bean>
>
>         <bean id="sqlMapClient10"
> class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
>                 <property name="configLocation">
>                         <value>classpath:SqlMapConfig.xml</value>
>                 </property>
>         </bean>
>
>         <bean id="countryDao" class="daoImpl.SqlMapClientCountry">
>                 <property name="dataSource"><ref
> local="dataSource"/></property>
>                 <property name="sqlMapClient"><ref
> local="sqlMapClient10"/></property>
>         </bean>
>
> The SqlMapConfig file only contains the following :
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <!DOCTYPE sqlMapConfig
>     PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
>     "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
>
> <sqlMapConfig>
>
> <settings
>     cacheModelsEnabled="false"
>     enhancementEnabled="true"
>     lazyLoadingEnabled="true"
>     errorTracingEnabled="true"
>     maxRequests="250"
>     maxSessions="150"
>     maxTransactions="30"
>     useStatementNamespaces="false"
>     />
>
>         <sqlMap resource="Ibatis/maps/Country.xml"/>
>
> </sqlMapConfig>
>
> My DataSourceApplication class contains the database connection details and
> extends the BasicDataSource:
>
> public class DataSourceApplication extends BasicDataSource {
>
>         private ConfigEngineAppToProperties jdbcConnectionProperties;
>
>         final public void setJdbcConnectionProperties(
>                         ConfigEngineAppToProperties props) {
>                 jdbcConnectionProperties = props;
>
>         }
>
>         final public void init() throws RemoteException,SQLException {
>
>                 String driver = (String)
> jdbcConnectionProperties.get("driver");
>                 String url = (String) jdbcConnectionProperties.get("url");
>                 String username = (String)
> jdbcConnectionProperties.get("username");
>                 String password = (String)
> jdbcConnectionProperties.get("password");
>
>
>                         super.setDriverClassName(driver);
>                         super.setUrl(url);
>                         super.setUsername(username);
>                         super.setPassword(password);
>
>         }
>
>
> }
>
> Does anyone know how I can catch this problem and prevent the stop/start of
> Oracle of stopping my application. I would like that my application can
> catch this error and waits until Oracle is up again.The error I get is the
> following :
>
>  WARN
> [org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator]
> - <Unable to translate SQLException with errorCode '17002', will now try the
> fallback translator>
>
>  ERROR
> [org.springframework.jdbc.datasource.DataSourceUtils] -
> <Could not close JDBC connection>
> java.sql.SQLException: Already closed.
>
> After that every quey called has the following error :
>
>  Cause: java.sql.SQLException: Io exception: Connection reset>
>
> The only way to have it working again is by reloading the application in
> Tomcat 5.
>
>
> Thank you,
>
> Hilde