Stale connections

 

+

Search Tips   |   Advanced Search

 

WAS provides a special subclass of the java.sql.SQLException class for using connection pooling to access a relational database. This com.ibm.websphere.ce.cm.StaleConnectionException subclass exists in both a WebSphere 4.0 data source and in the most recent version data source that use the relational resource adapter. It serves to indicate that the connection currently held is no longer valid. This situation can occur for many reasons, including the following:

In the case of trying to use an orphaned connection or a connection that is made unavailable by auto connection cleanup, a StaleConnection exception indicates that the application has attempted to use a connection already returned to the connection pool. It does not indicate an actual problem with the connection. However, other cases of a StaleConnection exception indicate that the connection to the database has gone bad, or stale. Once a connection has gone stale, you cannot recover it, and completely close the connection rather than returning it to the pool.

 

Detecting stale connections

When a connection to the database becomes stale, operations on that connection result in an SQL exception from the JDBC driver. Because an SQL exception is a rather generic exception, it contains state and error code values used to to determine the meaning of the exception. However, the meanings of these states and error codes vary depending on the database vendor. The connection pooling run time maintains a mapping of which SQL state and error codes indicate a StaleConnection exception for each database vendor supported. When the connection pooling run time catches an SQL exception, it checks to see if this SQL exception is considered a StaleConnection exception for the database server in use.

 

Recovering from stale connections

Recovering from stale connections is a joint effort between the appserver run time and the application developer. From an appserver perspective, the connection pool is purged based on its PurgePolicy setting.

Explicitly catching a StaleConnection exception is not required in an application. Because applications are already required to catch the java.sql.SQL exception, and the StaleConnection exception extends an SQL exception, a StaleConnection exception can result from any method that is declared to create an SQL exception, and is caught automatically in the general catch-block. However, explicitly catching a StaleConnection exception makes it possible for an application to recover from bad connections. When application code catches a StaleConnection exception, it should take explicit steps to handle the exception.


Sub-topics


Example: Handling data access exception - StaleConnectionException

 

Related concepts


Resource adapters
Data sources
Connection pooling

 

Related Reference


Connection pool settings