2013-03-07 6 views
13

ठीक है। यह फिर से उद्योग अभ्यास का सवाल है।जेबॉस बनाम टोमकैट के साथ स्प्रिंग एमवीसी - लाभ/अभ्यास

  • बिलाव = वेब कंटेनर
  • JBoss, WebLogic, आदि = अनुप्रयोग सर्वर JBoss तरह अनुप्रयोग सर्वर की जरूरत नहीं है के भीतर (JBoss के लिए, अपने काँटेदार बिलाव)

स्प्रिंग वेब कंटेनर है। हम JMS तरह उद्यम सेवाओं का उपयोग करते हैं, आदि हम RabbitMQ, ApacheMQ, आदि

  1. प्रश्न की तरह स्वतंत्र प्रणाली का उपयोग कर रहा है यही कारण है कि लोगों को अभी भी JBoss का उपयोग कर सकते हैं और अन्य आवेदन विशुद्ध रूप से आधारित अनुप्रयोगों वसंत के लिए कार्य करता है?
  2. एप्लिकेशन सर्वर का उपयोग करके स्प्रिंग का उपयोग करने के क्या फायदे हैं? ऑब्जेक्ट पूलिंग की तरह? एप्लिकेशन सर्वर क्या विशिष्ट फायदे प्रदान करता है? वे कैसे कॉन्फ़िगर किए गए हैं?
  3. यदि वसंत के लिए नहीं, तो अन्य प्रयोजनों के लिए स्प्रिंग/हाइबरनेट आदि के लिए एप्लिकेशन सर्वर का उपयोग किया जाता है? (मामलों का उपयोग करें)

उत्तर

6

असल में मैं कहूंगा कि जेएमएस के लिए सुनना शायद एक सर्वर सर्वर के लिए सबसे अच्छा कारण है। एक स्टैंड अकेले संदेश दलाल समस्या को ठीक नहीं करता है क्योंकि आपको अभी भी ऐसे घटक की आवश्यकता है जो संदेशों को सुन रहा हो। ऐसा करने का सबसे अच्छा तरीका एमडीबी का उपयोग करना है। सिद्धांत रूप में आप स्प्रिंग्स MessageListenerContainer का उपयोग कर सकते हैं। हालांकि इस तरह के कई नुकसान हैं जैसे कि जेएमएस केवल पढ़ने को अवरुद्ध करने का समर्थन करता है और इसलिए वसंत को अपने स्वयं के धागे को स्पिन करने की आवश्यकता होती है जो पूरी तरह से असमर्थित (यहां तक ​​कि टॉमकैट में) है और लेनदेन, सुरक्षा, नामकरण (जेएनडीआई) और कक्षा लोडिंग को तोड़ सकता है (जो बदले में टूट सकता है दूरस्थ)। एक जेसीए संसाधन एडाप्टर जो कुछ भी चाहता है वह करने के लिए स्वतंत्र है वर्कमैनेजर के माध्यम से थ्रेड कताई सहित। संभावना है कि जेएमएस (या अन्य गंतव्य) के अलावा एक डेटाबेस का उपयोग किया जाता है, जिस बिंदु पर आपको एक्सए-लेनदेन और जेटीए की आवश्यकता होती है, दूसरे शब्दों में एक एप्लीकेशन सर्वर। हां आप इसे सर्वलेट कंटेनर में पैच कर सकते हैं लेकिन यह बिंदु यह एप्लिकेशन सर्वर से अलग नहीं हो सकता है।

आईएमएचओ अनुप्रयोग सर्वर के खिलाफ सबसे बड़ा कारण यह है कि एक spec प्रकाशित होने के कई सालों बाद (जो बदले में भी वर्षों लेता है) जब तक कि सेवर्स ने spec को लागू नहीं किया है और सबसे खराब बग को बाहर निकाला है। केवल अब, ईई 7 प्रकाशित होने से ठीक पहले क्या हमारे पास ईई 6 सर्वर दिखने लगे हैं जो पूरी तरह से बग के साथ नहीं हैं। यह उस बिंदु पर हास्यपूर्ण हो जाता है जहां कुछ विक्रेता अब अपनी ईई 6 लाइन में बग ठीक नहीं करते हैं क्योंकि वे आगामी ईई 7 लाइन के साथ पहले ही व्यस्त हैं।

संपादित अंतिम अनुच्छेद की

लांग स्पष्टीकरण: स्थानों का एक बहुत में

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

कुछ लिंक

http://www.oracle.com/technetwork/java/restrictions-142267.html#threads http://www.ibm.com/developerworks/websphere/techjournal/0609_alcott/0609_alcott.html#spring-4

हम सर्वलेट 3.0 विनिर्देश जाँच अगर हमें पता चलता:

2.3.3.3 अतुल्यकालिक प्रसंस्करण

जावा एंटरप्राइज़ संस्करण धारा 15.2 के रूप में ऐसी सुविधाओं पृष्ठ 2-174 और धारा 15.3.1 पर "वेब अनुप्रयोग पर्यावरण", "सेकू का प्रचार ईजेबीटीएम कॉल में rity पहचान "पृष्ठ 15-176 पर केवल प्रारंभिक अनुरोध को निष्पादित करने वाले थ्रेड के लिए उपलब्ध है या जब AsyncContext.dispatch विधि के माध्यम से कंटेनर को अनुरोध भेजा जाता है। जावा एंटरप्राइज़ संस्करण सुविधाएं AsyncContext.start (Runnable) विधि के माध्यम से प्रतिक्रिया ऑब्जेक्ट पर सीधे चल रहे अन्य थ्रेडों के लिए उपलब्ध हो सकती हैं।

यह असीमित प्रक्रिया के बारे में है लेकिन कस्टम थ्रेड के लिए एक ही प्रतिबंध लागू होते हैं।

सार्वजनिक शून्य प्रारंभ (रननेबल आर) - यह विधि निर्दिष्ट रननेबल चलाने के लिए कंटेनर को संभवतः एक प्रबंधित थ्रेड पूल से थ्रेड भेजने का कारण बनती है। कंटेनर रननेबल को उपयुक्त प्रासंगिक जानकारी प्रसारित कर सकता है।

फिर, एसिंक्रोनस प्रोसेसिंग लेकिन कस्टम थ्रेड के लिए एक ही प्रतिबंध लागू होते हैं।

15.2.2 वेब अनुप्रयोग पर्यावरण

सर्वलेट कंटेनर के इस प्रकार जब डेवलपर द्वारा बनाया धागे पर प्रदर्शन किया, लेकिन वर्तमान में तो करने के लिए आवश्यक नहीं कर रहे हैं इस व्यवहार का समर्थन करना चाहिए। इस तरह के एक आवश्यकता को इस विनिर्देश के अगले संस्करण में जोड़ा जाएगा। डेवलपर्स को चेतावनी दी जाती है कि आवेदन-निर्मित धागे के लिए इस क्षमता के आधार पर अनुशंसित नहीं है, क्योंकि यह गैर-पोर्टेबल है।

गैर पोर्टेबल का मतलब है कि यह एक सर्वर में हो सकता है लेकिन दूसरे में नहीं।

आप JMS साथ संदेश प्राप्त करते हैं बाहर एक एमडीबी के आप चार विधियों javax.jms.MessageConsumer पर उपयोग कर सकते हैं चाहते हैं: यह करने के लिए एक कंटेनर सूत्र में

  • #receiveNoWait() आप कर सकते हैं, यह ब्लॉक नहीं करता है, लेकिन यह देखना पसंद है । अगर कोई संदेश मौजूद नहीं है तो यह null लौटाता है। यह संदेशों को सुनने के लिए बहुत उपयुक्त नहीं है।
  • #receive(long) आप इसे कंटेनर थ्रेड में कर सकते हैं, यह ब्लॉक करता है। आप आम तौर पर एक कंटेनर थ्रेड में अवरुद्ध करने की प्रतीक्षा नहीं करते हैं। संदेशों को सुनने के लिए फिर से बहुत उपयुक्त नहीं है।
  • #receive(), यह ब्लॉक संभवतः अनिश्चित काल तक। संदेशों को सुनने के लिए फिर से बहुत उपयुक्त नहीं है।
  • #setMessageListener() यह वही है जो आप चाहते हैं, जब कोई संदेश आता है तो आपको कॉलबैक मिल जाता है। हालांकि जब तक कि लाइब्रेरी एप्लिकेशन सर्वर में हुक नहीं कर लेती है, यह एक कंटेनर थ्रेड नहीं होगा। एप्लिकेशन सर्वर में हुक केवल संसाधन अनुकूलक के लिए जेसीए के माध्यम से उपलब्ध हैं।

तो हाँ, यह काम कर सकता है, लेकिन इसकी गारंटी नहीं है और ऐसी कई चीजें हैं जो टूट सकती हैं।

+2

'हालांकि यह कई नुकसान JMS केवल अवरुद्ध पढ़ता है और वसंत इसलिए यह की अपनी धागे ऊपर स्पिन जो पूरी तरह असमर्थित (बिलाव में भी) है और लेन-देन, सुरक्षा तोड़ सकते हैं की जरूरत है का समर्थन करता है की तरह है, नामकरण (जेएनडीआई) और कक्षा लोडिंग (जो बदले में रिमोटिंग तोड़ सकती है)। क्या आप मुझे दिखा सकते हैं कि आपको यह कहां मिला? मुझे यकीन है कि कुछ लोग ऐप सर्वर के बिना स्वतंत्र संदेश दलाल के साथ वसंत का उपयोग करते हैं। यह पता लगाने की कोशिश कर रहा है कि कोई भी इस समस्या को कहीं भी लाया है या नहीं। यह नहीं कह रहा कि आप गलत हैं! :-) अधिक अंतर्दृष्टि प्राप्त करने की कोशिश कर रहा है। –

0

हम JNDI डेटा स्रोतों के लिए बिल्ला से अधिक JBoss का उपयोग कर रहे हैं और पूलिंग .. यह यह इतना प्रोग्रामर डेटाबेस लेकिन इसकी JNDI नाम

2

आप सही है कि आप डॉन 'कर रहे हैं के बारे में कुछ भी पता नहीं है बनाता है वसंत का उपयोग करने के लिए वास्तव में एक सही अनुप्रयोग सर्वर (सभी जावा ईई चश्मे को लागू करने) की आवश्यकता नहीं है। लोगों को जेबॉस जैसे वास्तविक जावा ईई ऐप्स का उपयोग करने का सबसे बड़ा कारण यह नहीं है कि ठंडा स्टार्ट अप समय पर # $ @ #% धीमी गति से विकास हो रहा है (गर्म तैनाती अभी भी अच्छी तरह से काम नहीं करती है)।

  • जावा ईई
  • स्प्रिंग फ्रेमवर्क:

    तुम देखो दो शिविरों देखते हैं।

शिविरों में से एक कल्पना/समिति प्रक्रिया में विश्वास करता है और दूसरा उदार तानाशाह/कार्बनिक ओएसएस प्रक्रिया में विश्वास करता है। दोनों के पास अपने "एजेंडा" वाले लोग हैं।

शायद आपको two camps are much like the Emacs vs VIM war के रूप में बहुत अच्छा निष्पक्ष उत्तर नहीं मिलेगा।

w/एक स्प्रिंग पूर्वाग्रह

  1. अपने सवालों के जवाब क्योंकि यह सिद्धांत रूप में अपने कम विक्रेता लॉक-इन खरीदता है (हालांकि मैं इस पाया है विपरीत होने के लिए)।
  2. वसंत का सबसे बड़ा लाभ AspectJ AOP है। से दूर।
  3. मुझे लगता है कि फिलिप का जवाब देखें।

(शेख़ी की शुरुआत)

के बाद से @PhilippeMarschall जावा ईई का बचाव किया मुझे कहना होगा कि मैं बिलाव + RabbitMQ + वसंत मार्ग किया है और यह बहुत अच्छी तरह से काम करता है। @ फिलिपपे मार्कस्ल चर्चा मान्य है यदि आप उचित जेटीए + जेएमएस चाहते हैं लेकिन स्प्रिग एएमक्यूपी के साथ उचित सेटअप के साथ और पोस्टग्रेस्क्ल जैसे एक अच्छे लेनदेन डेटाबेस के साथ यह एक मुद्दा है। इसके अलावा वह संदेश कतार लेनदेन के बारे में भी गलत है, जो स्प्रिंग का समर्थन करता है (और IMHO @Transactional AOP के साथ अधिक सुंदरता से) के रूप में प्लेटफार्म लेनदेन को बाध्य/सिंक्रनाइज़ नहीं किया जाता है। इसके अलावा AMQP जेएमएस से बेहतर है।

(शेख़ी के अंत)

+0

> लोग जेबॉस जैसे वास्तविक जावा ईई ऐप्स का उपयोग नहीं करते हैं, तो यह ठंडा प्रारंभ पर # $ @ #% के रूप में धीमा हो गया है - मेरे 3 साल पुराने i7 पर: "जेबॉस ईएपी 6.0.1.जीए (एएस 7.1.3। अंतिम-redhat-4) 1845ms में शुरू हुआ - 217 सेवाओं में से 136 शुरू हुआ (80 सेवाएं निष्क्रिय या ऑन-डिमांड हैं) " –

+0

मुझे पता है कि जेबॉस ने अपनी गति में सुधार किया है क्योंकि पारंपरिक रूप से यह भगवान बहुत धीमा था। मुझे गलत जेबॉस एएस डाउनलोड करना होगा क्योंकि यह मेरे स्प्रिंग एमवीसी ऐप के बूट समय को दोगुना करता है। –

+4

हाँ मैंने अभी कोशिश की है। जेबॉस 6.1.0 अल्फा बनाम टोमकैट 7।हाँ जेबॉस एक वेबएप तेजी से w/o शुरू होता है लेकिन यह मेरे स्प्रिंग एमवीसी वेबपैप को तैनात करने के बाद टॉमकैट 7 जितना धीमा हो जाता है। –

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