2008-09-25 28 views
26

जावा में स्टेटलेस बीन्स क्लाइंट से दो कॉल के बीच अपना राज्य नहीं रखते हैं। तो संक्षेप में हम उन्हें व्यावसायिक तरीकों के साथ वस्तुओं के रूप में मान सकते हैं। प्रत्येक विधि पैरामीटर लेता है और परिणाम लौटाता है। जब विधि को बुलाया जाता है तो कुछ स्थानीय चर निष्पादन स्टैक में बनाए जा रहे हैं। जब विधि लौटाती है तो स्थानीय लोगों को ढेर से हटा दिया जाता है और यदि कुछ अस्थायी वस्तुओं को आवंटित किया जाता है तो वे कचरा इकट्ठा होते हैं।क्यों पूल स्टेटलेस सत्र सेम?

मेरे परिप्रेक्ष्य से जो अलग-अलग धागे द्वारा एक ही उदाहरण के कॉलिंग विधि से अलग नहीं है। तो क्यों एक कंटेनर उनमें से कई को पूल करने के बजाय एक बीन के एक उदाहरण का उपयोग नहीं कर सकता?

उत्तर

27

पूलिंग कई चीजें करता है।

एक, प्रति उदाहरण एक बीन होने के कारण, आपको थ्रेड सुरक्षित होने की गारंटी है (उदाहरण के लिए, Servlets, थ्रेड सुरक्षित नहीं हैं)।

दो, आप किसी भी संभावित स्टार्टअप समय को कम करते हैं जो एक बीन हो सकता है। जबकि सत्र बीन्स "स्टेटलेस" हैं, उन्हें केवल ग्राहक के संबंध में स्टेटलेस होना चाहिए। उदाहरण के लिए, ईजेबी में, आप एक सत्र बीन में कई सर्वर संसाधन इंजेक्ट कर सकते हैं। वह राज्य बीन के लिए निजी है, लेकिन ऐसा कोई कारण नहीं है कि आप इसे आमंत्रण से आमंत्रित न करें। तो, बीन्स को पूल करके आप इन लुकअप को केवल तभी बनाते हैं जब बीन बनाया जाता है।

तीन, आप यातायात को थ्रॉटल करने के साधन के रूप में बीन पूल का उपयोग कर सकते हैं। यदि आपके पास पूल में केवल 10 बीन्स हैं, तो आपको केवल 10 अनुरोधों को एक साथ काम करने जा रहे हैं, बाकी को कतारबद्ध किया जाएगा।

+3

"एक, प्रति उदाहरण एक बीन होने के कारण, आपको थ्रेड सुरक्षित होने की गारंटी है (उदाहरण के लिए, Servlets, थ्रेड सुरक्षित नहीं हैं)।" एक स्टेटलेस सत्र बीन में थ्रेड सुरक्षित सहायता कैसे हो रही है? – anjanb

+0

जब आप दावा करते हैं कि Servlets थ्रेड-सुरक्षित नहीं हैं, तो मुझे समझ में नहीं आता कि आपका क्या मतलब है। आईआईआरसी, टॉमकैट प्रबंधन कंसोल मुझे Servlets पूल भी करने की अनुमति देता है। – Alan

+1

स्टेटलेस सत्र बीन्स सरल घटक हैं।उनके पास "राज्य" हो सकता है, लेकिन राज्य घटक से संबंधित है, न कि ग्राहक के लिए। बीन में एक पूर्ण जीवन चक्र है। तो, आपके पास स्थानीय कैश हो सकता है, उदाहरण के लिए, बीन में और इसे सिंक्रनाइज़ करने की चिंता न करें। –

0

स्टेटलेस सत्र बीन्स का जीवन चक्र मौजूद नहीं है, निष्क्रिय और विधिप्रवाह (निष्क्रिय या निष्क्रिय) राज्य। बीमैन को सक्रिय करने के लिए विधि से तैयार राज्य के माध्यम से, बीमारियों को सक्रिय करने के बजाय, कंटेनर सक्रिय के बीच बीन का प्रबंधन करता है और कंटेनर कॉलबैक के माध्यम से निष्क्रिय राज्य - बीन पूल के प्रबंधन द्वारा ejbActivate() और ejbPassivate() वहां।

स्रीनट

1

पूलिंग प्रदर्शन को बढ़ाता है।

सभी अनुरोध/थ्रेडों को संभालने वाला एक उदाहरण, बहुत से विवाद और अवरोध का कारण बनता है।

चूंकि आप नहीं जानते कि किस उदाहरण का उपयोग किया जाएगा (और कई धागे एक साथ एक उदाहरण का उपयोग कर सकते हैं), सेम थ्रेडसेफ होना चाहिए।

कंटेनर वास्तविक गतिविधि के आधार पर पूल आकार का प्रबंधन कर सकता है।

1

जावा ईई मॉडल की लेनदेन लेनदेन जीवन चक्र का प्रबंधन करने के लिए थ्रेड संदर्भ का उपयोग करती है।

यह सरलीकरण मौजूद है ताकि उपयोगकर्ता ट्रांज़ेक्शन ऑब्जेक्ट के साथ सीधे बातचीत करने के लिए किसी भी विशिष्ट इंटरफ़ेस को लागू करना आवश्यक नहीं है; जब लेन-देन को प्रारंभिक कॉन्टेक्स्ट (या सत्र बीन में इंजेक्शन) से पुनर्प्राप्त किया जाता है, तो यह पुन: उपयोग के लिए थ्रेड-लोकल वैरिएबल से जुड़ा होता है (उदाहरण के लिए यदि आपके स्टेटलेस सत्र बीन में कोई विधि एक अन्य स्टेटलेस सत्र बीन कहती है जो इंजेक्शन लेनदेन का भी उपयोग करती है।)