स्टेटलेस सेशन बीन पर स्टेटफुल सेशन बीन का इस्तेमाल कब करें?


83

एक स्टेटफुल सेशन बीन को इस प्रकार परिभाषित किया गया है:

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

एक स्टेटलेस सेशन बीन को इस प्रकार परिभाषित किया गया है:

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

स्टेटफुल सेशन बीन पर एक स्टेटलेस सेशन बीन का उपयोग करने का लाभ इस प्रकार है:

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

तो जो सवाल मन में आता है वह यह है कि किसी को राज्य सत्र सत्र का उपयोग करना चाहिए? इस मामले के बारे में मेरी भोली समझ के लिए, एक व्यक्ति को एक बेकार सत्र सेम का उपयोग करने के लिए छड़ी करना चाहिए।

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

सत्र बीन


जवाबों:


151

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

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

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

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

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

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


16
" यदि ग्राहक गायब हो जाते हैं तो बीन भी नष्ट हो जाता है "। असल में, स्टेटफुल सेशन बीन्स तब तक अपने आप नष्ट नहीं हो जाते, जब तक कि उनके द्वारा सजाए गए तरीके @Remove( javax.ejb) को स्पष्ट रूप से नहीं लगाया जाता (उस पद्धति को कोडित करने की आवश्यकता नहीं है। इसे केवल खाली / खाली छोड़ा जा सकता है, जिसे यह द्वारा एनोटेट किया गया है @Remove)। यदि संबंधित क्लाइंट एक स्टेटफुल सेशन बीन को नष्ट करना भूल गया, तो बीन को सर्वर पर झूलने तक रखा जाएगा जब तक कि कंटेनर स्वयं अपनी पॉलिसी का उपयोग करके इसे हटाने का फैसला नहीं करता। क्या मैं गलत हो रहा हूँ?
टाइनी

3
बेशक आप ठीक हैं। बीन जीवनचक्र के बारे में अधिक जानकारी यहाँ मिल सकती है: docs.oracle.com/javaee/6/tutorial/doc/giplj.html
Tobiasdenzler

48

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.