Не мисля, че правенето на връзки с бази данни безопасни за нишки е обичайна практика. Обикновено това, което искате е:
- Сериализирайте достъпа до част от вашия сървлет, така че да няма повече от един изпълняващ код на сървлет наведнъж (напр. прилагане на
SingleThreadModel
интерфейс). - Заключване на определена таблица/страница/ред на таблица, така че да можете да работите с конкретен кортеж (чрез промяна на нивото на изолация на базата данни).
- Използване на оптимистично заключване за откриване на модифицирани редове в таблица (използване на някакъв референтен атрибут на таблицата, за да се провери дали текущата версия е същата като тази в таблицата).
AFAIK, типичното използване на ThreadLocal<Connection>
е да съхранявате уникална връзка към база данни за нишка, така че една и съща връзка да може да се използва в различни методи във вашата бизнес логика, без да е необходимо да я предавате като параметър всеки път. Тъй като изпълнението на общия контейнер на сървлет използва нишка за изпълнение на HTTP заявка, тогава две различни заявки са гарантирани, че използват две различни връзки към база данни.