2010-01-06 14 views
53

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

आरएमआई पर ईजेबी का लाभ क्या है, या इसके विपरीत?

वेब सेवाओं (एसओएपी, आरईएसटी) के बारे में क्या?

उत्तर

112

ईजेबी आरएमआई के शीर्ष पर बनाए गए हैं। दोनों जावा क्लाइंट और सेम का मतलब है। यदि आपके ग्राहकों को किसी और चीज में लिखा जाना चाहिए (उदा।, .NET, PHP, इत्यादि) वेब सेवाओं या कुछ और प्लेटफॉर्म-अज्ञेय तार प्रोटोकॉल बोलते हैं, जैसे HTTP या XML पर HTTP या SOAP।

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

आरएमआई काफी कम स्तर है जब आप इसके बारे में सोचते हैं। आप वापस वापस कोर्बा क्यों छोड़ देंगे?

बेहतर विकल्प ईजेबी 3.0 बनाम वसंत है। यह इस बात पर निर्भर करता है कि क्या आप पीओजेओ विकास पसंद करते हैं, अन्य चीजों के साथ ओआरएम और जेपीए के अलावा रिलेशनल टेक्नोलॉजीज का विकल्प चाहते हैं।

आप जावा ईई ऐप सर्वर (उदाहरण के लिए, वेबलॉगिक, वेबस्पेयर) के लिए भुगतान कर सकते हैं या ओपन सोर्स वन (जेबीओएसएस, ग्लासफ़िश और ओपनईजेबी और एक्टिवएमक्यू) का उपयोग कर सकते हैं, या आप टॉमकैट, जेट्टी, रालिन पर वसंत और तैनाती कर सकते हैं या कोई अन्य सर्वलेट/जेएसपी इंजन। (हाइबरनेट, iBatis, JDBC, JDO, जेपीए, TopLink), दूरस्थ (HTTP, हेस्सियन, बर्लेप, RMI, साबुन वेब सेवा), आदि

हठ:

वसंत प्रौद्योगिकी नास्तिक होने से पसंद का एक बहुत प्रदान करता है

ईजेबी 3.0 कई विक्रेताओं के साथ एक विशिष्टता है; वसंत केवल वसंत स्रोत से हो सकता है।

मैं Spring की अनुशंसा करता हूं। यह बहुत ठोस है, बहुत सारे कर्षण हैं, कहीं भी नहीं जा रहे हैं। यह आपके सभी विकल्पों को खुला छोड़ देता है।

वेब सेवाओं सिद्धांत में महान हैं, लेकिन वहाँ कुछ gotchas है कि आप के लिए बाहर देखने की जरूरत है कर रहे हैं:

  1. विलंबता। फाउलर का वितरित वस्तुओं का पहला कानून: "मत करो!" बहुत अच्छी तरह से वितरित एसओएपी सेवाओं वाली एक वास्तुकला में गुड़िया के रूप में सुरुचिपूर्ण, सुंदर और धीमी गति होगी। वितरण से पहले सावधानी से सोचें।
  2. एक्सएमएल से ऑब्जेक्ट्स तक मार्शलिंग और बैक सीपीयू चक्रों का उपभोग करता है जो आपके क्लाइंट को मंच-अज्ञेय प्रोटोकॉल बोलने की अनुमति देने के अलावा कोई व्यावसायिक मूल्य प्रदान नहीं कर रहे हैं।
  3. एसओएपी एक मानक है जो हर दिन अधिक फूला हुआ और जटिल होता जा रहा है, लेकिन इसमें बहुत सारे टूल समर्थन हैं। विक्रेताओं की तरह यह क्योंकि यह ईएसबी की ड्राइव बिक्री में मदद करता है। आरईएसटी सरल है लेकिन समझा नहीं गया है। यह उपकरण द्वारा समर्थित नहीं है।

वसंत का वेब सेवा मॉड्यूल बहुत अच्छा है, लेकिन इस तरह से तैनात करने के बारे में सावधान रहें। पीओजेओ सेवा इंटरफेस के मामले में लिखें। ये आपको वैचारिक अलगाव प्राप्त करने की अनुमति देगा, आखिरी पल तक तैनाती की पसंद को रोक देगा, और यदि आपका विचार अच्छा प्रदर्शन नहीं करता है तो आप अपना दिमाग बदल सकते हैं।

+2

मैं duffymo से सहमत हूं। वसंत जाने का रास्ता है ... –

+0

स्प्रिंग वेब सेवाएं? वसंत खोज करने के लिए एक बड़ा शब्द है। :-) –

+0

हाइपरलिंक जोड़ने के लिए संपादित: http://www.springsource.org/ – duffymo

10
EJB और RMI बीच

, EJB निश्चित रूप से बेहतर होगा - यह कंटेनर के माध्यम से सब कुछ RMI है और भी बहुत कुछ (वस्तु पूलिंग, लेन-देन प्रबंधन, आदि)

बीच EJB और वेब सेवाओं है, वेब सेवाओं देना होगा यदि आप उन्हें भविष्य में गैर-जावा ऐप्स से कॉल करने में सक्षम होना चाहते हैं तो आप अधिक पोर्टेबिलिटी। ईजेबी आपको फिर से लेनदेन प्रबंधन और पूलिंग जैसी चीजें देता है कि आपको वेब सेवाओं के साथ "बॉक्स से बाहर" नहीं मिल सकता है।

व्यक्तिगत रूप से, अगर मैं इसे कर रहा था, तो शायद मैं ईजेबी या कुछ समान रिमोट ऑब्जेक्ट फ्रेमवर्क का उपयोग करता हूं (वसंत रिमोटिंग भी दिमाग में आता है)। यदि आपको ऑब्जेक्ट को गैर-जावा ऐप से कॉल करने की क्षमता की आवश्यकता है, तो आप हमेशा आवश्यकतानुसार सरल वेब सेवा प्रॉक्सी के साथ अपने ईजेबी को आगे बढ़ा सकते हैं।

+1

क्या आप तेजी से स्प्रिंग रिमोटिंग की तुलना ईजेबी से कर सकते हैं? मुझे गैर-जावा ऐप्स के साथ काम करने की क्षमता की आवश्यकता नहीं है, लेकिन अतीत में ईजेबी की अनावश्यकता मिली है, जबकि वेब सेवाएं लिखने/बनाए रखने के लिए अधिक सरल और सरल लगती हैं। –

+2

@ डीन जे - ईजेबी जे 2 ईई के पुराने संस्करणों में काफी जटिल थे, लेकिन 3.0 में बहुत सरल हो गए हैं। मैंने वसंत को बहुत अधिक रिमोटिंग का उपयोग नहीं किया है, लेकिन यहां एक लेख है जो दो बिट की तुलना करता है: http://onjava.com/pub/a/onjava/2005/06/29/spring-ejb3.html?page=1 –

+0

मैं उस लेख पर एक नज़र डालूंगा, और ईजेबी 3 का पुनर्मूल्यांकन करूंगा; ईजेबी 2 बस बदसूरत महसूस किया। –

4

पुन: वेब सेवाएं (एसओएपी, आरईएसटी) यदि आपके बैक एंड सर्वर सार्वजनिक रूप से उजागर नहीं होने जा रहे हैं, तो आपको एसओएपी/आरईएसटी जैसे प्लेटफ़ॉर्म स्वतंत्र वेब सेवा इंटरफेस का उपयोग करने से कोई लाभ नहीं मिल रहा है।
असल में आप रिमोट कॉल में डेटा को लपेटने वाले एक्सएमएल टैग द्वारा जोड़े गए सभी ओवरहेड के साथ जुर्माना लगाएंगे, जो कि आप हिट से लेकर हिट का उल्लेख नहीं करेंगे और एक्सएमएल को जावा ऑब्जेक्ट्स को अनमर्शल कर देंगे।
हालांकि किसी भी वितरित कॉल को सीरियलाइजेशन के कुछ स्तर की आवश्यकता होगी - यहां तक ​​कि आरएमआई/ईजेबी, लेकिन जब मानव पठनीय एक्सएमएल को क्रमबद्ध किया जाता है तो कीमत अधिक होती है।

आपको जावा में रिमोट कॉल को कोड करने की आवश्यकता नहीं हो सकती है, तो आप एक सादा अपाचे httpd इंस्टेंस के साथ अपनी सेवा का सामना कर सकते हैं, जो mod_jk या mod_proxy का उपयोग करके कई जावा सर्वरों में संतुलन लोड करने के लिए कॉन्फ़िगर किया गया है।
इन मॉड्यूल का उपयोग टोमकैट/जेट्टी, या ईबीबी कंटेनर जैसे जेबॉस/ग्लासफ़िश जैसे सर्वलेट कंटेनरों में संतुलन लोड करने के लिए किया जा सकता है।

+6

REST तार प्रारूप (उदा। एक्सएमएल) के बारे में कुछ भी नहीं कहता है। – user359996

+2

वास्तव में एक नोड.जेएस सर्वर और एक JSON REST API के साथ मैं 100% सुनिश्चित करता हूं कि जावास्क्रिप्ट ऑब्जेक्ट्स के सीरिएज़िएशन और deserialization किसी भी जावा चीज उड़ जाएगा। – bluehallu