Jeg har haft problemer som dette før, når databasen er på en separat boks, og der er en firewall imellem, som er indstillet til timeout for inaktive forbindelser.
I nogle tilfælde afbryder firewallen forbindelsen på en sådan måde, at JDBC-enden ikke registrerer, og forsøg på at bruge den resulterer i en ubestemt blokering.
I mit tilfælde var det en brugerdefineret forbindelsespulje, som sendte en testforespørgsel ned i forbindelsen, før den returnerede fra poolen. Jeg konfigurerede denne testforespørgsel til at have en timeout (ved hjælp af Statement.setQueryTimeout), så den ikke blokerede på ubestemt tid.