Nie sądzę, że tworzenie połączeń z bazą danych bezpiecznych dla wątków jest powszechną praktyką. Zwykle chcesz:
- Serializować dostęp do jakiejś części serwletu, aby nie więcej niż jeden serwlet wykonywał kod na raz (np. implementacja
SingleThreadModel
interfejs). - Zablokowanie określonej tabeli / strony tabeli / wiersza, aby można było operować na określonej krotce (poprzez zmianę poziomu izolacji bazy danych).
- Używając optymistycznego blokowania do wykrywania zmodyfikowanych wierszy w tabeli (używając jakiegoś atrybutu referencyjnego tabeli, aby sprawdzić, czy bieżąca wersja jest taka sama jak ta w tabeli).
AFAIK, typowe użycie ThreadLocal<Connection>
jest przechowywanie unikalnego połączenia z bazą danych na wątek, dzięki czemu to samo połączenie może być używane w różnych metodach w logice biznesowej bez konieczności przekazywania go za każdym razem jako parametru. Ponieważ wspólna implementacja kontenera serwletów wykorzystuje wątek do realizacji żądania HTTP, dwa różne żądania mają gwarancję wykorzystania dwóch różnych połączeń z bazą danych.