Nemyslím si, že vytváření databázových připojení bezpečných pro vlákna je běžnou praxí. Obvykle to, co chcete, je:
- Serializujte přístup k některé části vašeho servletu tak, aby kód nespouštěl více než jeden servlet současně (např. implementace
SingleThreadModel
rozhraní). - Uzamknutí konkrétní tabulky / stránky tabulky / řádku, abyste mohli pracovat s nějakou konkrétní n-ticí (změnou úrovně izolace databáze).
- Použití optimistického zamykání k detekci upravených řádků v tabulce (pomocí nějakého referenčního atributu tabulky ke kontrole, zda je aktuální verze stejná jako ta v tabulce).
AFAIK, typické použití ThreadLocal<Connection>
je uložit jedinečné databázové připojení na vlákno, takže stejné připojení lze použít v různých metodách ve vaší obchodní logice, aniž byste je museli pokaždé předávat jako parametr. Protože běžná implementace kontejneru servletů používá vlákno ke splnění požadavku HTTP, je zaručeno, že dva různé požadavky budou používat dvě různá databázová připojení.