L'utilizzo di un pool di connessioni può aiutare a risolvere questo problema.
Ecco un post sulla configurazione di un pool di connessioni Puoi avere solo una sessione di ibernazione per thread in java?
Ecco un altro post sulle varie librerie di pool di connessioni disponibili.
iberna il pool di connessioni predefinito