2012-04-13 8 views
7

मुझे आश्चर्य है कि सीडीआई (@ApplicationScoped, @SessionScoped और @RequestScoped) में विभिन्न बीन स्कॉप्स को कैसे लागू किया जाता है। मैं जीवन चक्र को समझता हूं, लेकिन जहां कंटेनर में इन संग्रहित होते हैं? मैं जेएसएफ बीन्स पर इन एनोटेशन का उपयोग कर रहा हूं।सर्वर पर विभिन्न बीन स्कॉप्स कैसे काम करते हैं?

सर्वर पर इन बीन्स कैसे संग्रहीत किए जाते हैं और सर्वर यह जानने में सक्षम है कि कौन से सेम कौन से हैं।

उदाहरण के लिए एक बीन है जिसमें @SessionScopedHTTPSession दृश्यों के पीछे ऑब्जेक्ट में संग्रहीत है? @ApplicationScoped के साथ बीन्स ServletContext में मानचित्र आवृत्ति चर में संग्रहीत हैं? यदि हां, तो थ्रेड सुरक्षा के बारे में क्या। मुझे लगता है कि मैंने इसे गलत समझा है लेकिन यह बहुत अच्छा होगा अगर कोई मुझे सिखा सकता है कि क्या होता है, जहां वे संग्रहीत होते हैं (अलग-अलग क्षेत्रों), सर्वर यह जानने में सक्षम है कि कौन से सेम कौन से हैं ... जैसे कोई अन्य आईडी हैं (न केवल सत्र आईडी)?

मैं जावा ईई 6 सभी संदर्भ कार्यान्वयन का उपयोग कर बीटीडब्ल्यू हूं।

उत्तर

3

उदाहरण के लिए एक बीन है जिसमें @SessionScoped दृश्यों के पीछे HTTPSession ऑब्जेक्ट में संग्रहीत है? @AplicationScoped के साथ सेम हैं ServletContext में एक नक्शा आवृत्ति चर में संग्रहीत?

वेब परत के लिए, वास्तव में ऐसा होता है। यदि बीन को तुरंत चालू किया गया है तो आप अक्सर उन मानचित्रों में सभी वस्तुओं पर मैन्युअल रूप से पुन: प्रयास करके इसे वापस देख सकते हैं।

@RequestScoped हालांकि एक विशेष बात है। वेब परत में यह अनुरोध विशेषता मानचित्र से मेल खाता है, लेकिन यह दायरा भी कॉल पर लागू होता है उदा। रिमोट सत्र सेम, या संदेश संचालित बीन्स एक संदेश संसाधित। उस स्थिति में, कोई http अनुरोध नहीं है और इसलिए कोई अनुरोध विशेषता मानचित्र नहीं है। ऐसा लगता है कि वे 'कहीं और' संग्रहीत हैं, शायद टीएलएस (थ्रेड लोकल स्टोरेज) में जो बीन प्रॉक्सी द्वारा सेट और सेट नहीं है।

यदि हां, तो थ्रेड सुरक्षा के बारे में क्या।

आवेदन- और सत्र स्कॉप्ड बीन्स स्वयं ही थ्रेड सुरक्षित नहीं हैं। आप को धागे-सुरक्षा का ख्याल रखना है, उदाहरण के लिए थ्रेड-सुरक्षित डेटा संरचनाओं, सिंक्रनाइज़ किए गए कीवर्ड या एक बीन प्रकार का उपयोग करके जो मूल रूप से थ्रेड-सुरक्षित है (जैसे @ स्टेटेट एनोटेटेड बीन)।

+0

ठीक है, तो इसके मुकाबले इसके लिए कोई और "होकस पॉकस" नहीं है :) लेकिन, मैं समझता हूं कि '@ एप्लिकेशनस्कोप्ड' एकेए सर्वलेट कॉन्टेक्स्ट थ्रेडसेफ नहीं है क्योंकि कई क्लाइंट एक ही समय में इसे बदलने की कोशिश कर सकते हैं ... लेकिन 'सत्र सत्र 'धागा सुरक्षित क्यों नहीं है? क्या यह सिर्फ एक ग्राहक नहीं है जिसकी एक ही बीन तक पहुंच है? – LuckyLuke

+0

'सत्र स्कोप्ड' के लिए वस्तुतः कोई सीमा नहीं है कि कितने अनुरोध एक साथ पहुंच सकते हैं। बेशक, वे आम तौर पर सभी एक ही ग्राहक से उत्पन्न होते हैं। एक ही विंडो से आने वाली कई खिड़कियां, एकाधिक टैब या एकाधिक AJAX अनुरोधों को सोचें। –

+0

ठीक है, तो आपने उल्लेख किया है कि यदि एक बीन स्वाभाविक रूप से थ्रेड-सुरक्षित है जैसे कि ईजेबी (कम से कम कुछ प्रकार) ... तो आप का मतलब है कि इसे जेएसएफ में इस्तेमाल किए गए बीन की संपत्ति के रूप में रखा जाता है? – LuckyLuke

संबंधित मुद्दे