Check the connection pool settings ( Inactive Connection Timeout ). This value should ideally be zero. This might be a probable reason for the database connection to get closed even before any transaction completes. The parameter "Inactive Connection Timeout" will be set to any positive integer ( in seconds ) if the application code did not explicitly close the database connection after usage. If you are sure that there are no database connection leaks in your application, then you can very well go ahead and set the value of "Inactive Connection Timeout" to zero.
Hope this helps.