यह वर्तमान में वास्तव में थोड़ा भ्रमित है क्योंकि जावा ईई में अब कई घटक मॉडल हैं। वे CDI , EJB3 और JSF प्रबंधित बीन्स हैं ।
सीडीआई ब्लॉक पर नया बच्चा है। सीडीआई बीन्स सुविधा dependency injection
, scoping
और ए event bus
। CDI बीन्स इंजेक्शन और स्कूपिंग के संबंध में सबसे लचीली हैं। इवेंट बस बहुत ही हल्की होती है और वेब एप्लिकेशनों के लिए भी सबसे उपयुक्त होती है। इसके अतिरिक्त, CDI एक बहुत ही उन्नत सुविधा भी कहलाती है portable extensions
, जो कि जावा EE को अतिरिक्त कार्यक्षमता प्रदान करने के लिए विक्रेताओं के लिए एक प्रकार का प्लग-इन तंत्र है, जो सभी कार्यान्वयनों पर उपलब्ध कराया जा सकता है (ग्लासफ़िश, JBoss एएस, वेबस्पेयर, आदि) ।
EJB3 बीन्स को पुराने विरासत EJB2 घटक मॉडल * से हटा दिया गया था और एक एनोटेशन के माध्यम से सेम प्रबंधित करने के लिए जावा ईई में पहली सेम थी। EJB3 सेम की सुविधा dependency injection
, declarative transactions
, declarative security
, pooling
, concurrency control
, asynchronous execution
और remoting
।
EJB3 बीन्स में निर्भरता इंजेक्शन CDI बीन्स की तरह लचीला नहीं है और EJB3 बीन्स में स्कूपिंग की कोई अवधारणा नहीं है। हालांकि, EJB3 सेम ट्रांजेक्शनल हैं और डिफ़ॉल्ट रूप से ** , दो बहुत ही उपयोगी चीजें हैं जिन्हें CDI ने EJB3 के डोमेन में छोड़ने के लिए चुना है। अन्य उल्लिखित वस्तुएँ भी CDI में उपलब्ध नहीं हैं। EJB3 का अपना कोई इवेंट बस नहीं है, लेकिन इसमें संदेशों को सुनने के लिए एक विशेष प्रकार की बीन है; संदेश संचालित बीन। इसका उपयोग जावा मैसेजिंग सिस्टम या JCA संसाधन एडाप्टर वाले किसी अन्य सिस्टम से संदेश प्राप्त करने के लिए किया जा सकता है। सरल घटनाओं के लिए पूर्ण विकसित संदेश का उपयोग करना सीडीआई इवेंट बस की तुलना में कहीं अधिक भारी है और ईजेबी 3 केवल एक श्रोता को परिभाषित करता है, निर्माता एपीआई को नहीं।
JSF के शामिल होने के बाद से JSF प्रबंधित बीन्स जावा EE में मौजूद है। वे भी सुविधाdependency injection
और scoping
। जेएसएफ मैनेज्ड बीन्स ने घोषणात्मक स्कूपिंग की अवधारणा पेश की। मूलतः स्कोप बल्कि सीमित थे और जावा ईई के उसी संस्करण में जहां ईजेबी 3 बीन्स को पहले से ही एनोटेशन के माध्यम से घोषित किया जा सकता था, जेएसएफ मैनेजड बीन्स को अभी भी एक्सएमएल में घोषित किया जाना था। JSF प्रबंधित बीन्स के वर्तमान संस्करण को भी अंत में एक एनोटेशन के माध्यम से घोषित किया जाता है और स्कोप को एक दृश्य दायरे और कस्टम स्कोप बनाने की क्षमता के साथ विस्तारित किया जाता है। दृश्य गुंजाइश, जो एक ही पृष्ठ के अनुरोधों के बीच डेटा को याद करती है, जेएसएफ प्रबंधित बीन्स की एक अनूठी विशेषता है।
व्यू स्कोप के अलावा, जावा ईई 6 में जेएसएफ मैनेजेड बीन्स के लिए अभी भी बहुत कम चल रहा है। सीडीआई में लापता व्यू स्कोप दुर्भाग्यपूर्ण है, क्योंकि अन्यथा सीडीआई जेएसएफ मैनेजेड बीन्स की पेशकश का एक आदर्श सुपर सेट होता। अपडेट : जावा ईई 7 / जेएसएफ 2.2 में एक सीडीआई संगत @ViewScoped जोड़ा गया है, जिससे CDI वास्तव में सुपर सेट हो गया है। अद्यतन 2 : JSF2.3 में JSF प्रबंधित बीन्स को CDI प्रबंधित बीन्स के पक्ष में हटा दिया गया है।
EJB3 और CDI के साथ स्थिति स्पष्ट कटौती नहीं है। EJB3 घटक मॉडल और API बहुत सी सेवाएँ प्रदान करता है जो CDI प्रदान नहीं करता है, इसलिए आमतौर पर EJB3 को CDI से बदला नहीं जा सकता है। दूसरी ओर, CDI को EJB3 के साथ संयोजन में उपयोग किया जा सकता है - जैसे EJBs में स्कोप सपोर्ट जोड़ना।
रेजा रहमान, विशेषज्ञ समूह सदस्य और एक सीडीआई कार्यान्वयन के प्रवर्तक, जिसे कैनडीआई कहा जाता है, ने अक्सर संकेत दिया है कि ईजेबी 3 घटक मॉडल से जुड़ी सेवाओं को सीडीआई एनोटेशन के एक सेट के रूप में रेट्रोफिट किया जा सकता है। अगर ऐसा होता है, तो जावा ईई में सभी प्रबंधित बीन्स सीडीआई बीन्स बन सकते हैं। इसका मतलब यह नहीं है कि EJB3 गायब हो जाता है या अप्रचलित हो जाता है, लेकिन सिर्फ इतना है कि इसकी कार्यक्षमता EJB के स्वयं के एनोटेशन जैसे @Stateless और @EJB के माध्यम से CDI के माध्यम से उजागर होगी।
अपडेट करें
TomEE और OpenEJB प्रसिद्धि के डेविड Blevins अपने ब्लॉग पर CDI और EJB के बीच अंतर और समानता को बहुत अच्छी तरह से समझाते हैं: CDI, जब EJB को बाहर निकालना है
* हालांकि यह संस्करण संख्या में सिर्फ एक वृद्धि है, EJB3 सेम अधिकांश भाग के लिए एक पूरी तरह से अलग तरह का सेम था: एक साधारण पूजो जो एक सरल एकल एनोटेशन को लागू करके "प्रबंधित बीन" बन जाता है, बनाम मॉडल में E2B2 जहां एक हैवीवेट और अत्यधिक वर्बोज़ एक्सएमएल डिस्क्रिप्शन डिस्क्रिप्टर को प्रत्येक और हर बीन के लिए आवश्यक था, बीन के अलावा विभिन्न बेहद हेवीवेट को लागू करने के लिए और अधिकांश भाग अर्थहीन घटक इंटरफेस के लिए आवश्यक था।
** स्टेटलेस सेशन बीन्स को आमतौर पर पूल किया जाता है, स्टेटफुल सेशन सेम आमतौर पर नहीं (लेकिन वे हो सकते हैं)। दोनों प्रकार के लिए पूलिंग इस प्रकार वैकल्पिक है और EJB कल्पना इसे किसी भी तरह से अनिवार्य नहीं करती है।