56

स्टेटफुल सत्र सेम पालन परिभाषित किया गया है:स्टेटलेस सत्र बीन पर स्टेटस सत्र बीन का उपयोग कब करें?

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

स्टेटलेस सत्र सेम पालन परिभाषित किया गया है:

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

यह भी पालन राज्यविहीन सत्र सेम का लाभ बताया गया है:

क्योंकि राज्यविहीन सत्र सेम कई ग्राहकों का समर्थन कर सकते हैं, वे अनुप्रयोग जो बड़ी संख्या में ग्राहकों की की आवश्यकता के लिए प्रस्ताव बेहतर scalability कर सकते हैं। आम तौर पर, किसी एप्लिकेशन को ग्राहकों की समान संख्या का समर्थन करने के लिए राज्यव्यापी सत्र बीन्स की तुलना में कम स्टेटलेस सत्र बीन्स की आवश्यकता होती है।

तो सवाल यह है कि जब कोई व्यक्ति राज्य सत्र सत्र बीन्स का उपयोग करना चाहिए तो क्या सवाल है? इस मामले की मेरी निष्पक्ष समझ के लिए, किसी को स्टेटलेस सत्र बीन का उपयोग करने के लिए चिपकना चाहिए।

उम्मीदवारों को क्या होगा जिसमें किसी को राज्य सत्र सत्र बीन का उपयोग करना चाहिए? कोई अच्छा उदाहरण?

Session Bean

+0

संबंधित: http://stackoverflow.com/questions/8887140/jsf-request-scoped-bean-keeps-recreating- new-stateful- सत्र-beans-on-every-req – BalusC

उत्तर

95

सबसे पहले आप को समझने के लिए सेम बनाया है और सर्वर पर नियंत्रित किया जाता है कैसे की है।

स्टेटलेस सत्र बीन्स सर्वर पूल में उदाहरणों की एक परिवर्तनीय मात्रा को बनाए रख सकता है। प्रत्येक बार एक ग्राहक इस तरह के एक स्टेटलेस बीन (उदाहरण के लिए एक विधि के माध्यम से) अनुरोध करता है कि उस अनुरोध को पूरा करने के लिए एक यादृच्छिक उदाहरण चुना जाता है। इसका मतलब है कि यदि क्लाइंट दो बाद के अनुरोध करता है तो यह संभव है कि स्टेटलेस बीन के दो अलग-अलग उदाहरण अनुरोधों को पूरा करते हैं। वास्तव में दो अनुरोधों के बीच कोई बातचीत स्थिति नहीं है। अगर ग्राहक गायब हो जाता है, तो स्टेटलेस बीन नष्ट नहीं होता है और दूसरे ग्राहक से अगले अनुरोध की सेवा कर सकता है।

दूसरी तरफ राज्य सत्र सत्र बीन क्लाइंट से निकटता से जुड़ा हुआ है। प्रत्येक उदाहरण एक क्लाइंट को बनाया और बाध्य किया जाता है और केवल उस विशेष ग्राहक से अनुरोध करता है। ऐसा होता है कि यदि आप एक राज्य के बीन पर दो अनुवर्ती अनुरोध करते हैं, तो आपका अनुरोध हमेशा बीन के उसी उदाहरण से परोसा जाएगा। इसका मतलब है कि आप अनुरोधों के बीच एक बातचीत स्थिति बनाए रख सकते हैं। जीवनशैली के अंत में ग्राहक एक निकासी विधि कहता है और बीन को कचरा संग्रह के लिए नष्ट/तैयार किया जा रहा है।

स्टेटलेस या स्टेटफुल का उपयोग कब करें?

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

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

+13

"* यदि ग्राहक गायब हो जाते हैं बीन भी नष्ट हो जाता है * "। दरअसल, राज्यव्यापी सत्र बीन्स स्वचालित रूप से नष्ट नहीं होते हैं जब तक कि 'निकालें' ('javax.ejb') द्वारा सजाए गए तरीके को स्पष्ट रूप से लागू नहीं किया जाता है (उस विधि को कोड भी नहीं किया जाना चाहिए। इसे खाली/खाली छोड़ दिया जा सकता है 'निकालें 'द्वारा एनोटेटेड)। यदि संबंधित क्लाइंट एक राज्यव्यापी सत्र बीन को नष्ट करना भूल गया है, तो उस बीन को सर्वर पर लटकने पर रखा जाएगा जब तक कि कंटेनर स्वयं अपनी नीति का उपयोग करके इसे हटाने का फैसला नहीं करता। क्या मैं गलत जा रहा हूँ? – Tiny

+3

बेशक आप सही हैं। बीन लाइफसाइक्ल पर अधिक जानकारी यहां मिल सकती है: http://docs.oracle.com/javaee/6/tutorial/doc/giplj.html – tobiasdenzler

27

मुझे लगता है कि एक स्टेटफुल सत्र सेम का उपयोग कर का सबसे बड़ा उदाहरण एक शॉपिंग कार्ट है, जहां आप सभी उत्पादों जो उपयोगकर्ता खरीदना चाहता है की दुकान के लिए है।

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