ग्राहक बीन के इंटरफेस के माध्यम से एक सत्र या इकाई बीन तक पहुंचते हैं। ईजेबी कंटेनर इस व्यवहार को लागू करने और प्रबंधित करने के लिए इंटरफ़ेस कार्यान्वयन उत्पन्न करता है, जो ग्राहक और बीन के बीच संचार के लिए एक संवहनी के रूप में कार्य करता है। ईजेबी 2.0 विनिर्देश से पहले संस्करणों में, सभी बीन्स को वितरित, दूरस्थ घटकों के रूप में परिभाषित और कार्यान्वित किया गया था। नतीजतन, बीन्स की आवश्यकता वाले दो इंटरफेस को होम इंटरफ़ेस (जो सामान्य रूप से, जीवन चक्र विधियों को परिभाषित करता है) और दूरस्थ इंटरफ़ेस (जो सामान्य रूप से, कार्यात्मक व्यावसायिक तरीकों को परिभाषित करता है) कहा जाता था।
Internally, J2EE uses the Java Remote Method Invocation over Internet Inter-ORB Protocol (RMI-IIOP) to enable remote, distributed method calls and applications. While this approach provides many benefits, it also generates a large amount of overhead, with a corresponding performance hit as stubs are referenced, parameters go through the marshaling process, and objects are tossed around the network.
Considerations of performance, practicality, and typical usage in the field resulted in the introduction of local interfaces in the EJB 2.0 specification. As noted, prior terminology referred to the home interface and the remote interface; at this point, depending on which approach is used, local interface and local home interface or remote interface and remote home interface are better terms. Either of the local home or remote home interfaces is referred to as the home interface; either of the local or remote interfaces is referred to as the component interface. This tutorial refers to the interfaces in these terms and uses these conventions for names.
When using J2EE technologies, it is normal to focus on distributed, or remote, beans, but you should keep the local option in mind, when applicable. It may be surprising to learn that a bean can have local interfaces, remote interfaces, or both. However, the client must write to a specific (that is, local or remote) interface. There are some issues to keep in mind when using local interfaces:
बीन्स एक ही वीएम में चलने चाहिए - वे सभी के बाद स्थानीय हैं। पैरामीटर्स को प्रतिलिपि बनाने के बजाय संदर्भ द्वारा भेजा जाता है, जैसा रिमोट इंटरफेस और ऑब्जेक्ट्स के मामले में होता है। अप्रत्याशित दुष्प्रभाव का परिणाम हो सकता है यदि आप इस भेद को अनदेखा करते हैं और तदनुसार कोड नहीं करते हैं। आमतौर पर, स्थानीय या दूरस्थ पहुंच का उपयोग करने का निर्णय प्रभावित होता है:
क्लाइंट का प्रकार - जब तक आप हमेशा क्लाइंट को वेब घटक या अन्य बीन होने की अपेक्षा नहीं करते हैं, तो दूरस्थ पहुंच चुनें।
चाहे सेम कसकर या ढीले ढंग से युग्मित हों - यदि सेम एक दूसरे पर निर्भर करते हैं और अक्सर बातचीत करते हैं, तो स्थानीय पहुंच पर विचार करें।
स्केलेबिलिटी - रिमोट एक्सेस स्वाभाविक रूप से स्केलेबल है और इसका उपयोग किया जाना चाहिए यदि स्केलेबिलिटी एक महत्वपूर्ण कारक है। ईजेबी 2.0 विनिर्देशन में स्थानीय इंटरफेस के आगमन के साथ, अधिकांश स्रोतों की सिफारिश है कि इकाई सेम लगभग हमेशा स्थानीय पहुंच पर आधारित होना चाहिए। स्थानीय इंटरफेस के साथ, बहुत बढ़िया डेटा पहुंच के संबंध में अधिकांश प्रदर्शन मुद्दे दूर हो जाते हैं। यदि ग्राहक रिमोट है, तो मानक डिज़ाइन पैटर्न में क्लाइंट एक सत्र बीन तक पहुंचने के लिए रिमोट इंटरफ़ेस का उपयोग करता है, जो तब इकाई बीन के संपर्क के रूप में कार्य करता है। सत्र बीन एक स्थानीय इंटरफ़ेस के माध्यम से इकाई बीन के साथ संचार करता है (पैटर्न दृष्टिकोण से, इस तकनीक को सत्र फ़ैकेड कहा जाता है, और इसका उपयोग वास्तव में दूरस्थ या स्थानीय संदर्भ में किया जा सकता है)।
मैं मानता हूं कि कई मामलों में मुझे दोनों के लिए अलग-अलग इंटरफेस डिजाइन करना पड़ सकता है, लेकिन जिन मामलों में मेरे पास दो के लिए एक ही इंटरफेस है, मैं इसे स्थानीय और रिमोट दोनों के साथ एनोटेट करने में सक्षम होना चाहिए। इसका लाभ यह है कि मेरे क्लाइंट को यह चिंता करने की ज़रूरत नहीं है कि क्या यह स्थानीय या दूरस्थ आमंत्रण है (सिवाय जब वह jndi नाम निर्दिष्ट कर रहा हो)। यह दोनों मामलों में एक ही इंटरफेस प्राप्त करेगा ताकि यह दोनों समान रूप से इलाज कर सके। –
अच्छा, बेहतर या बदतर के लिए, spec लेखकों ने इस बात से सहमत नहीं था कि ऐसी "स्थानीय/दूरस्थ आजादी" वांछनीय है। निजी तौर पर, मैं इस बारे में विशिष्ट लेखकों से सहमत हूं। – djna