ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andre Peterka" <apete...@nsdcom.de>
Subject Socket write error
Date Fri, 19 Nov 2004 16:45:18 GMT
Hi all

One customer reported a problem to us, that they are getting the following
error message:

com.ibatis.dao.client.DaoException: Error executing
query for object.  Cause: java.sql.SQLException: Io exception: Connection
reset by peer: socket write error

The cause is a restart of the Database while the application is still
running.

The transactionManager is configured via
 <transactionManager type="JDBC" >
	<dataSource type="JNDI">
		<property name="DataSource"
value="java:comp/env/jdbc/dataSourceName"/>
	</dataSource>
 </transactionManager>


Oracle suggest something like the following, when using TopLink, to
reestablish a connection:

	if (clientSession != null)
			db = clientSession;

		if (db == null || !db.isConnected()) {

			logger.info("Login Info:  trying to connect to
ClientSession ...");

			ServerSession server = (ServerSession)
getToplinkServer();
			db = server.acquireClientSession();
			db.connect();
			clientSession = db;
		}

		db.setExceptionHandler(new ExceptionHandler() {
			public Object handleException(RuntimeException
exception) {
				if (logger.isDebugEnabled()) {
	
logger.debug("handleException(RuntimeException) - start");
				}

				if ((exception instanceof DatabaseException)
						&&
(exception.toString().indexOf(
								"onnection
reset by peer") > 0)) {
					DatabaseException dbex =
(DatabaseException) exception;
	
dbex.getAccessor().reestablishConnection(dbex.getSession());
					serverSession = null;
					clientSession = null;
					Object returnObject =
dbex.getSession().executeQuery(
							dbex.getQuery());
	
return returnObject;
				}

				return null;
			}
		});

		clientSession = db;
		return db;

How can this be done with iBatis??

Any suggestions would be appreciated.

Thanx, Andre

Mime
View raw message