EJB में स्थानीय / दूरस्थ और नो-इंटरफ़ेस दृश्य क्या है?


80

मैं यह समझने की कोशिश कर रहा हूं कि ईजेबी में अलग-अलग क्लाइंट के विचारों का उद्देश्य और उद्देश्य क्या है। क्या कोई समझाने की कोशिश कर सकता था?

जवाबों:


126

दूरस्थ ग्राहक दृश्य

जब आपका EJB और उसके ग्राहक एक वितरित वातावरण में होंगे - अर्थात EJB और ग्राहक अलग-अलग Java वर्चुअल मशीनों पर निवास करेंगे। उदाहरण: EJBs एक WebSphere Application Server और सर्वलेट्स पर होस्ट किया गया है जो एक Tomcat सर्वर पर होस्ट किए गए EJB API का उपभोग करते हैं।

स्थानीय ग्राहक दृश्य

केवल जब यह गारंटी दी जाती है कि अन्य उद्यम सेम या ग्राहक केवल एक ही जेवीएम के भीतर सेम को संबोधित करेंगे। उदाहरण के लिए, EJBs और साथ ही एक ही WebSphere सर्वर पर तैनात सर्वलेट्स।

नो-इंटरफ़ेस दृश्य

लगभग स्थानीय क्लाइंट दृश्य के समान है, लेकिन मतभेद हैं। इस मामले में क्लाइंट व्यू इंटरफेस लागू करने के लिए आपकी बीन क्लास की आवश्यकता नहीं है। बीन क्लास के सभी सार्वजनिक तरीके स्वचालित रूप से कॉलर के संपर्क में हैं। नो-इंटरफ़ेस दृश्य हमेशा एक EJB संदर्भ प्राप्त करता है - जैसे स्थानीय या दूरस्थ दृश्य - या तो इंजेक्शन या JNDI लुकअप के माध्यम से; लेकिन, EJB संदर्भ का जावा प्रकार स्थानीय इंटरफ़ेस के प्रकार के बजाय बीन क्लास प्रकार है। यह जावा ईई 6 के हिस्से के रूप में शुरू की गई एक सुविधा है।

स्थानीय क्लाइंट दृश्य और नो-इंटरफ़ेस दृश्य के बीच अंतर

नो-इंटरफ़ेस दृश्य के मामले में, क्लाइंट और लक्ष्य बीन को एक ही एप्लिकेशन (EAR) में पैक किया जाना चाहिए। स्थानीय दृश्य के मामले में, क्लाइंट को एंटरप्राइज़ एप्लिकेशन की तुलना में एक अलग एप्लिकेशन में पैक किया जा सकता है। तो, यह आपके घटकों को ठीक करने के मामले में अधिक लचीलापन देता है।

आप अपने API उपयोग परिदृश्य के आधार पर स्थानीय क्लाइंट दृश्य बनाम नो-इंटरफ़ेस दृश्य का उपयोग कर सकते हैं। यह भविष्य के चश्मे में लचीली सुविधाओं को प्राप्त करने के लिए नो-इंटरफ़ेस दृश्य के लिए बहुत संभावना है।

कारण

ऐतिहासिक रूप से या अन्यथा, ईजेबी सेवाओं का उपयोग करने के इच्छुक ग्राहक को कंटेनर (कुछ प्रारंभिक संदर्भों के साथ) को "देखना" चाहिए था। ऐसा इसलिए था क्योंकि सभी चालान कंटेनर द्वारा प्रदान किए गए एक विशेष ईजेबी संदर्भ (प्रॉक्सी) के माध्यम से किए जाते हैं। यह कंटेनर को सभी अतिरिक्त बीन सेवाओं जैसे पूलिंग, कंटेनर-प्रबंधित लेनदेन आदि प्रदान करने की अनुमति देता है। इसलिए, एक ग्राहक newऑपरेटर के साथ एक EJB को स्पष्ट रूप से नहीं कर सकता है । क्लाइंट दृश्य कुछ इंटरफेस के माध्यम से प्रदान किया जाता है जो क्लाइंट के पास होगा। सर्वर इंटरफेस पर प्रॉक्सी अहसास इन इंटरफेस के आधार पर किया जाता है। जैसा कि ऊपर बताया गया है, अलग-अलग क्लाइंट व्यू को अलग-अलग परिनियोजन परिदृश्यों के अनुरूप परिभाषित किया जाता है।


5
मैं सोच रहा था कि क्या यह वास्तव में मामला है, कि विभिन्न एंटरप्राइज़ अनुप्रयोगों के बीच एक स्थानीय क्लाइंट दृश्य का उपयोग किया जा सकता है। EJB 3.2 विनिर्देशन में, खंड 3.2.2 में, यह कहा गया है कि स्थानीय ग्राहक के विचारों के माध्यम से विभिन्न अनुप्रयोगों से बीन्स मंगाना विशिष्ट है और कंटेनरों में समर्थित नहीं हो सकता है। आपके मन में कोई विशिष्ट ऐप सर्वर था?
mcmil

क्या हुआ? अगर हम "नया" एक EJB (यह हो सकता है अगर ग्राहक और EJB एक ही आवेदन में रहते हैं)
8

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

एक और बात जो मुझे सिर्फ JBoss 7.1.3 में महसूस हुई है कि जब मेरे पास एक EJB है जो एक ऐसे इंटरफ़ेस को लागू करता है जिसे न तो स्थानीय या रिमोट के रूप में चिह्नित किया जाता है, तो मैं EJB को CDI बीन्स को एकजुट करते हुए CDI बीन्स में इसके इंटरफ़ेस प्रकार के रूप में इंजेक्ट कर सकता हूं। ईजेबी के बारे में यह कैसा है? मजेदार तथ्य यह है कि मैं इस बारे में JBoss में बग के कारण किसी भी स्थानीय या दूरस्थ इंटरफ़ेस प्रकार को CDI इंजेक्ट नहीं कर सकता।
गंडालफ

@mcmil आपकी खोज से सहमत है। यह निश्चित रूप से विक्रेता विशिष्ट है। EJB 3.1 युक्ति में उल्लेखित समान बात।
बैमाई वू

3

EJB 3.1 की धारा 3.2.2 के अनुसार विशिष्टता:

स्थानीय क्लाइंट दृश्य के माध्यम से एंटरप्राइज़ बीन तक पहुंच केवल स्थानीय क्लाइंट दृश्य प्रदान करने वाले एंटरप्राइज़ बीन के रूप में एक ही एप्लिकेशन के भीतर पैक किए गए स्थानीय क्लाइंट के लिए समर्थित होना आवश्यक है। इस विनिर्देश के अनुरूप कार्यान्वयन वैकल्पिक रूप से एक अलग अनुप्रयोग में पैक किए गए स्थानीय क्लाइंट से एंटरप्राइज़ बीन के स्थानीय क्लाइंट दृश्य तक पहुंच का समर्थन कर सकते हैं। स्थानीय क्लाइंट दृश्य के लिए अंतर-एप्लिकेशन पहुंच के लिए कॉन्फ़िगरेशन आवश्यकताएँ विक्रेता-विशिष्ट हैं और इस विनिर्देश के दायरे से बाहर हैं। स्थानीय क्लाइंट दृश्य के लिए अंतर-एप्लिकेशन पहुंच पर निर्भर अनुप्रयोग गैर-पोर्टेबल हैं।

नो-इंटरफ़ेस दृश्य केवल एक सुविधा सुविधा है जो एक बीन को एक अलग इंटरफ़ेस घोषित किए बिना एक स्थानीय क्लाइंट दृश्य को उजागर करने की अनुमति देता है।

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