Non credo che rendere le connessioni al database thread-safe sia una pratica comune. Di solito quello che vuoi è:
- Serializza l'accesso ad alcune parti del tuo servlet, in modo che non ci sia più di un servlet che esegue codice alla volta (es. implementando il
SingleThreadModel
interfaccia). - Blocco di una particolare tabella/pagina di tabella/riga in modo da poter operare su una particolare tupla (modificando il livello di isolamento del database).
- Utilizzo del blocco ottimistico per rilevare le righe modificate in una tabella (utilizzando alcuni attributi di riferimento della tabella per verificare se la versione corrente è la stessa di quella nella tabella).
AFAIK, l'uso tipico di ThreadLocal<Connection>
è archiviare una connessione al database univoca per thread, in modo che la stessa connessione possa essere utilizzata in metodi diversi nella logica aziendale senza la necessità di passarla ogni volta come parametro. Poiché l'implementazione del contenitore servlet comune utilizza un thread per soddisfare una richiesta HTTP, è garantito che due diverse richieste utilizzino due diverse connessioni al database.