Už jsem měl podobné problémy, když je databáze v samostatném boxu a mezi tím je firewall, který je nastaven tak, aby vypršel čas nečinnosti připojení.
Za určitých okolností firewall přeruší připojení takovým způsobem, že konec JDBC nedetekuje a pokus o jeho použití vede k neurčitému zablokování.
V mém případě to byl vlastní fond připojení, který odeslal testovací dotaz po připojení, než jej vrátil z fondu. Nakonfiguroval jsem tento testovací dotaz tak, aby měl časový limit (pomocí Statement.setQueryTimeout), aby se neblokoval donekonečna.