I've already replied on JIRA, but I'll reply here too, so that forum users can find this...
Arguably, a decent connection pool should always reset a Connection when checked back into the pool, so that the next user of the Connection will get the equivalent of a fresh Connection (read-write, default transaction isolation). According to my tests, C3P0 does this, for example, while Commons DBCP does not.
Unfortunately, this special Hibernate 3.0.3 support was a last-minute change in Spring 1.2 final, and has just been tested against DriverManagerDataSource and C3P0, which worked for me...
It seems appropriate to me to change the default in Spring 1.2.1 back to "on_close", so that it will work with all connection pools out-of-the-box. That allows for proper cleanup in HibernateTransactionManager in any case, without relying on any specific connection pool behavior.
Everybody: If you use Spring 1.2 final with Hibernate 3.0.3 and HibernateTransactionManager, specify Hibernate's "hibernate.connection.release_mode" property as "on_close", to be on the safe side.
<bean id="sessionFactory" ...