मुझे नहीं लगता कि डेटाबेस कनेक्शन को थ्रेड-सुरक्षित बनाना एक आम बात है। आमतौर पर आप जो चाहते हैं वह या तो है:
- अपने सर्वलेट के कुछ हिस्से तक पहुंच को क्रमबद्ध करें, ताकि एक समय में एक से अधिक सर्वलेट निष्पादन कोड न हो (उदाहरण के लिए
SingleThreadModel
को लागू करना) इंटरफ़ेस)। - किसी विशेष तालिका/तालिका पृष्ठ/पंक्ति को लॉक करना ताकि आप किसी विशेष टपल पर काम कर सकें (डेटाबेस अलगाव स्तर को बदलकर)।
- तालिका में संशोधित पंक्तियों का पता लगाने के लिए आशावादी लॉकिंग का उपयोग करना (तालिका के कुछ संदर्भ विशेषता का उपयोग करके यह जांचने के लिए कि क्या वर्तमान संस्करण वही है जो तालिका में है)।
AFAIK, ThreadLocal<Connection>
. का विशिष्ट उपयोग प्रति थ्रेड एक अद्वितीय डेटाबेस कनेक्शन संग्रहीत करना है, ताकि एक ही कनेक्शन को हर बार एक पैरामीटर के रूप में पारित करने की आवश्यकता के बिना आपके व्यावसायिक तर्क में विभिन्न तरीकों से उपयोग किया जा सके। चूंकि सामान्य सर्वलेट कंटेनर कार्यान्वयन HTTP अनुरोध को पूरा करने के लिए थ्रेड का उपयोग करता है, इसलिए दो अलग-अलग अनुरोधों को दो अलग-अलग डेटाबेस कनेक्शन का उपयोग करने की गारंटी दी जाती है।