2008-09-16 11 views
71

मेरी टीम एक वेब फ्रंट एंड के साथ एक नया सेवा उन्मुख उत्पाद विकसित कर रही है। चर्चा के बारे में चर्चा में हम किस तकनीक का उपयोग करेंगे, हम एक जेबॉस एप्लिकेशन सर्वर, और फ्लेक्स फ्रंटएंड (एडोब एयर का उपयोग कर संभावित डेस्कटॉप परिनियोजन के साथ) और क्लाइंट और सर्वर को इंटरफ़ेस करने के लिए वेब सेवाओं को चलाने पर बस गए हैं।क्या मुझे अपनी व्यावसायिक परत के लिए ईजेबी 3 या स्प्रिंग का उपयोग करना चाहिए?

जब हमारे सर्वर तर्क के लिए सर्वर तकनीक का उपयोग करना आता है तो हम एक बाधा पहुंचे हैं। बड़ी तर्क ईजेबी 3 और स्प्रिंग के बीच है, हमारी सबसे बड़ी चिंता स्केलेबिलिटी और प्रदर्शन, और कोड बेस की रखरखाव भी है।

यहाँ मेरी प्रश्न हैं:

  1. के लिए या EJB3 बनाम वसंत के खिलाफ तर्क क्या हैं?
    • मैं प्रत्येक के साथ क्या नुकसान की उम्मीद कर सकता हूं?
    • मुझे अच्छी बेंचमार्क जानकारी कहां मिल सकती है?
+3

आईएमएचओ, वसंत उपयोगी होगा और किसी भी पर्यावरण में आपके विकास प्रयास में योगदान देगा। मुझे लगता है कि मैं प्रत्येक परिदृश्य में वसंत का उपयोग करूंगा और मैं केवल विशेष परिस्थितियों में ईजेबी 3 का उपयोग करने पर विचार करूंगा (उदाहरण के लिए मेरे पास कुछ एप्लिकेशन सर्वर सुविधाएं हैं जिन्हें मुझे चाहिए (जैसे प्रशासन विकल्प)। –

उत्तर

71

प्रदर्शन पर आधारित ईजेबी 3 और वसंत के बीच बहुत अंतर नहीं होगा। हमने निम्नलिखित कारणों से स्प्रिंग का चयन किया (प्रश्न में उल्लिखित नहीं):

  • वसंत आर्किटेक्चर को उस दिशा में चलाता है जो अधिक आसानी से यूनिट परीक्षण का समर्थन करता है। उदाहरण के लिए, इकाई को अपनी व्यावसायिक परत का परीक्षण करने के लिए एक नकली डीएओ ऑब्जेक्ट इंजेक्ट करें, या स्प्रिंग के MockHttpRequest ऑब्जेक्ट को यूनिट परीक्षण करने के लिए उपयोग करें। हम इकाई परीक्षणों के लिए एक अलग स्प्रिंग कॉन्फ़िगर बनाए रखते हैं जो हमें विशिष्ट परतों के परीक्षणों को अलग करने की अनुमति देता है।
  • एक ओवरराइडिंग ड्राइवर संगतता थी। यदि आपको एक से अधिक ऐप सर्वर का समर्थन करने की आवश्यकता है (या अंततः जेबॉस से ग्लासफ़िश तक जाने का विकल्प चाहते हैं), तो आप अनिवार्य रूप से अपने कंटेनर (वसंत) को अपने साथ ले जायेंगे, बजाय विभिन्न कार्यान्वयन के बीच संगतता पर निर्भर रहने के बजाय ईजेबी 3 विनिर्देश।
  • वसंत दृढ़ता, ऑब्जेक्ट रिमोटिंग इत्यादि के लिए तकनीकी विकल्पों की अनुमति देता है। उदाहरण के लिए, हम फ्लेक्स फ्रंट एंड का भी उपयोग कर रहे हैं, और फ्लेक्स और स्प्रिंग के बीच संचार के लिए हेसियन प्रोटोकॉल का उपयोग कर रहे हैं।
+2

मुझे सर्वर से सर्वर पर कुछ मालिकाना कंटेनर ले जाने की तुलना में जावा ईई कार्यान्वयन के बीच संगतता पर भरोसा करने में अधिक भरोसा होगा। – ymajoros

+1

"जावा ईई कार्यान्वयन के बीच संगतता" कागज पर अच्छा है लेकिन एक अलग ऐप सर्वर पर आपके ईजेबी ऐप को तैनात करना एक और कहानी है, बस एक स्प्रिंग कंटेनर (जो स्वामित्व प्रति नहीं है) के विपरीत –

8

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

  1. EJB3 के रूप में (या जेपीए मैं दिन के अंत में लगता है) तो आप अब से निपटने के लिए बाहरी कॉन्फ़िगरेशन फ़ाइलें, और केवल एक POJO है जिसे आप प्रति डेटाबेस तालिका को एनोटेट करते हैं। यह POJO किसी भी समस्या के बिना आपके वेब स्तर पर पारित किया जा सकता है। नेटबींस जैसे आईडीई आपके लिए इन पीओजेओ को भी स्वचालित रूप से उत्पन्न कर सकते हैं। हमने अब कुछ बड़े पैमाने पर अनुप्रयोगों के लिए बैक एंड के रूप में ईजेबी 3 का उपयोग किया है, और किसी भी प्रदर्शन की समस्या नहीं देखी है। आपका सत्र बीन्स आसानी से वेब सेवाओं के रूप में उजागर किया जा सकता है जिसे आप अपने फ्लेक्स फ्रंटएंड पर उजागर कर सकते हैं। सत्र बीन्स भूमिकाओं को आवंटित करने के लिए किसी विधि या कक्षा स्तर पर लॉक करना आसान है और यदि आपको आवश्यकता हो तो ऐसी चीजें।

मैं वसंत के बारे में इतना कुछ नहीं बोल सकता, क्योंकि मैंने केवल कुछ हफ्तों के लिए इसे आजमाया था। लेकिन इसका मेरा प्रभाव बहुत खराब था। इसका मतलब यह नहीं है कि यह खराब ढांचा है, लेकिन हमारी टीम ने ईजेबी 3 को दृढ़ता/व्यापार परत के लिए सबसे अच्छा पाया है।

+0

@rustyshelf: क्या आप अपने डेटाबेस के आकार और एक साथ लॉग इन किए गए उपयोगकर्ताओं की संख्या, या प्रति सेकेंड लेनदेन की संख्या पर टिप्पणी कर सकते हैं? –

+0

हमारे अनुप्रयोगों में से एक में 2500 पंजीकृत उपयोगकर्ता हैं, जिनमें से केवल 100 ही अधिकतर कभी-कभी लॉग इन होंगे। दूसरों के पास कम एक साथ उपयोगकर्ता हैं, लेकिन वे ऊपर जाने के बाद लगातार हिट प्राप्त कर चुके हैं। हम ग्लासफ़िश का उपयोग हमारे कंटेनर के रूप में अपाचे के साथ करते हैं, लेकिन कभी-कभी केवल जीएफ ही। – rustyshelf

+0

डेटाबेस आकार के मामले में, क्या आपके पास टेबल, या पंक्तियों में पंक्तियां हैं? मुझे लगता है कि आपका मतलब डेटा है, और यदि ऐसा है तो हमारी टेबलें 'छोटी' हैं। मैं कहूंगा कि हमारी किसी भी तालिका में 20,000 से अधिक पंक्तियां नहीं होंगी। – rustyshelf

18

ईजेबी 3 बनाम वसंत के लिए या इसके खिलाफ तर्क क्या हैं? वसंत हमेशा वास्तविक दुनिया की बाधाओं को नवाचार और पहचानता है। वसंत ने जावा 1.4 एप्लिकेशन सर्वर के लिए सादगी और लालित्य की पेशकश की और जे 2 ईई विनिर्देश के एक संस्करण की आवश्यकता नहीं थी जिसे 2004-2006 में किसी के पास पहुंच नहीं थी। इस बिंदु पर यह लगभग एक धार्मिक बहस है जिसे आप चूसने में सक्षम हो सकते हैं - वसंत + अमूर्त + जावा एंटरप्राइज़ संस्करण (जावा ईई) 5.0 विनिर्देश बनाम ओपन-सोर्स।

मुझे लगता है कि वसंत जावा ईई विनिर्देशों के साथ प्रतिस्पर्धा से अधिक पूरक है। चूंकि स्प्रिंग्स के लिए एक बार अनूठी विशेषताओं को विनिर्देश में घुमाया जाता है, इसलिए कई लोग तर्क देंगे कि ईजेबी 3 अधिकांश आंतरिक व्यावसायिक अनुप्रयोगों के लिए 'पर्याप्त पर्याप्त' सुविधा सेट प्रदान करता है।

मैं प्रत्येक के साथ क्या नुकसान की उम्मीद कर सकता हूं? यदि आप ईजेबी 3 बनाम दृढ़ता के मुद्दे (वसंत + जेपीए) के रूप में इसका इलाज करते हैं तो आप वास्तव में उस विकल्प को बड़ा नहीं बनाते हैं।

मुझे अच्छी बेंचमार्क जानकारी कहां मिल सकती है? मैंने कुछ समय के लिए specj benchmark results का पालन नहीं किया है, लेकिन वे थोड़ी देर के लिए लोकप्रिय थे। ऐसा लगता है कि प्रत्येक विक्रेता (आईबीएम, जेबीएसएस, ओरेकल, और सन) एक अनुपालन सर्वर होने में कम और कम रुचि लेते हैं। जब आप 1.3, 1.4 से जाते हैं तो सूचियां प्रमाणित विक्रेताओं के छोटे और छोटे होते हैं। 1.5 जावा एंटरप्राइज़ संस्करण। मुझे लगता है कि एक विशाल सर्वर के दिन जो सभी विनिर्देशों के साथ पूरी तरह से अनुपालन कर रहे हैं।

+0

अच्छा। दुर्भाग्यवश, बेंचमार्क वसंत में नहीं ले गए थे। लेकिन यह समग्र जानकारी है। –

2

मैंने अतीत में एक बहुत ही समान वास्तुकला का उपयोग किया है। स्प्रिंग + जावा 1.5 + एक्शनस्क्रिप्ट 2/3 जब फ्लेक्स डेटा सर्विसेज के साथ मिलकर इसे कोड में बहुत आसान (और मजेदार!) बना दिया। हालांकि, फ्लेक्स फ्रंट एंड का मतलब है कि आपको पर्याप्त शक्तिशाली क्लाइंट मशीनों की आवश्यकता है।

+1

क्या फ्लेक्स डेटा सेवा BlazeDS का स्वामित्व संस्करण है? –

6

मैं EJB3 से अधिक वसंत पसंद करते हैं, लेकिन मेरी सिफारिश होगा जो भी तरीका अपनाना, POJOs लिखने के लिए छड़ी और जहां संभव मानक व्याख्या का उपयोग, इस तरह के @PostConstruct, @PreDestroy और के रूप में JSR एनोटेशन की तरह करने की कोशिश @ संसाधन जो ईजेबी 3 या वसंत दोनों के साथ काम करता है ताकि आप जो भी ढांचा पसंद करते हैं उसे चुन सकें।

उदा। आप आईओसी के बजाय गुइस का उपयोग करने के लिए कुछ परियोजनाओं पर निर्णय ले सकते हैं।

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

सत्र सेम ज्यादातर निर्भरता इंजेक्शन और लेनदेन के लिए उबालते हैं; इसलिए ईजेबी 3 और स्प्रिंग इसके लिए वास्तव में समान हैं। जहां वसंत का किनारा बेहतर निर्भरता इंजेक्शन और जेएसएमएस

34

जैसी चीजों के लिए किनारे पर है, ईजेबी 3 और वसंत के बीच का अंतर स्पष्ट रूप से उससे छोटा है। उस ने कहा, अब ईजेबी 3 के डाउनसाइड्स में से एक यह है कि आप केवल एक बीन में इंजेक्ट कर सकते हैं, ताकि आप घटकों को बीन्स में बदल सकें जिन्हें होने की आवश्यकता नहीं है।

इकाई परीक्षण के बारे में तर्क अब काफी अप्रासंगिक है - ईजेबी 3 स्पष्ट रूप से अधिक आसानी से परीक्षण योग्य होने के लिए डिज़ाइन किया गया है।

ऊपर अनुकूलता तर्क भी तरह का कोई वास्ता नहीं है: कि क्या आप EJB3 या वसंत का उपयोग करें, आप फिर भी लेनदेन प्रबंधकों, JMS, आदि के 3 पार्टी द्वारा प्रदत्त कार्यान्वयन पर निर्भर कर रहे हैं

क्या यह मेरे लिए उठती थी हालांकि, समुदाय द्वारा समर्थन है।पिछले साल एक ईजेबी 3 परियोजना पर काम करते हुए, वहां बहुत से लोग इसका इस्तेमाल नहीं कर रहे थे और उनकी समस्याओं के बारे में बात कर रहे थे। वसंत, सही या गलत रूप से, एंटरप्राइज़ में बेहद व्यापक, विशिष्टता है, और इससे किसी ऐसे व्यक्ति को ढूंढना आसान हो जाता है जिसे आप हल करने का प्रयास कर रहे हैं।

+4

++ और इससे ढूंढना आसान हो जाता है कोई भी व्यक्ति जिसकी समस्या है आप –

+3

को हल करने का प्रयास कर रहे हैं जो लेखन के समय मान्य हो सकता था। 2012 में, यह सच नहीं है। – ymajoros

-1

वसंत के पक्ष में एक और चीज यह है कि वसंत के साथ एकीकरण के लिए अन्य उपकरणों/ढांचे के अधिकांश में बेहतर समर्थन होता है, उनमें से अधिकतर आंतरिक रूप से वसंत का उपयोग करते हैं (जैसे सक्रिय एमक्यूएल, ऊंट, सीएक्सएफ आदि)।

यह भी अधिक परिपक्व है और बहुत सारे संसाधन (किताबें, लेख, सर्वोत्तम प्रथा आदि) & अनुभवी डेवलपर्स ईजेबी 3 के मुकाबले उपलब्ध हैं।

+0

शायद लिखने के समय (पट्टे पर अन्यथा साबित नहीं हो सकता)। निश्चित रूप से 2012 में नहीं। – ymajoros

-4

मुझे लगता है कि ईजेबी एक अच्छी घटक तकनीक है लेकिन एक अच्छा ढांचा नहीं है। सप्रिंग आज के रूप में उपलब्ध सर्वोत्तम ढांचा है। इसलिए मुझे स्प्रिंग को समझने के लिए जेईई का सबसे अच्छा कार्यान्वयन माना जाना चाहिए और मेरी सिफारिश है हर परियोजना में वसंत का उपयोग करें जो हमें आसानी से किसी भी घटक प्रौद्योगिकी के साथ एकीकृत करने के लिए लचीलापन देता है।

1

अपने प्रश्न के बारे में:

क्या के लिए या EJB3 बनाम वसंत के खिलाफ तर्क कर रहे हैं?

मैं विशेषज्ञों से प्रतिक्रिया पढ़ने का सुझाव देता हूं: A RESPONSE TO: EJB 3 AND SPRING COMPARATIVE ANALYSIS by Mark Fisher। रेजा रहमान की टिप्पणी (ईजेबी 3.0) को खोजने के लिए टिप्पणियां पढ़ें।

संबंधित मुद्दे

 संबंधित मुद्दे