When a close() is issued on a ConnectionImple() before transaction termination (and this can happen because of Spring JTA infrastructure calling org.springframework.jdbc.datasource.DataSourceUtils.ConnectionSynchronization.beforeCompletion()) and either:
- the ModifierFactory has no information about the DBMS in use (PostgreSQL, for instance...)
- the modifier for the DBMS says that it does not support multiple connections in a single transaction
then, the synchronization that should close the connection after transaction completion is not registered and the connection is lost!
This is at lines 349-359 of com.arjuna.ats.internal.jdbc.ConnectionImple in JBossTS 4.5.0 GA codebase.
IMHO, the synchronization should always be registered unless we are sure that multiple connections in a single transaction are not supported. I have no idea of what should happen in the latter case...