Recenetly we found that we were getting Closed connection exceptions in the application logs i.e. java.sql.SQLException: Closed Connection, After debugging we have found that the issue was with Firewall which after time out causing the dropping of the connection.
The workaround we found for this issue on the Database end. We tweked the sqlnet.expire_time parameter in sqlnet.ora on the Database from the default 30 minutes to 2 minutes. As after setting this Oracle server will send a ping to the client every 2 minutes. This might keep the connection from timing out.
The solution was to use the validationQuery(Test Connection On Reserve with Frequency interval) configuration parameter. So when a connection is interrupted by the Firewall. The next time the application needs to use a connection from the pool, the pool validate the connection before releasing it.