2008-11-06 8 views
14

वर्तमान में हमारे पास एक स्प्रिंग एप्लिकेशन संदर्भ लोड करने वाला एक वेब एप्लिकेशन है जो व्यावसायिक वस्तुओं, डीएओ ऑब्जेक्ट्स और हाइबरनेट के ढेर को तुरंत चालू करता है। हम एक ही ऑब्जेक्ट के कई उदाहरणों से बचने के लिए, इस स्टैक को किसी अन्य वेब एप्लिकेशन के साथ साझा करना चाहते हैं।जेबॉस और स्प्रिंग का उपयोग कर जावा वेब ऐप्स के बीच व्यावसायिक ऑब्जेक्ट इंस्टेंस साझा करने का सबसे अच्छा तरीका क्या है?

हमने कई दृष्टिकोणों को देखा है; जेएमएक्स या जेएनडीआई का उपयोग करके वस्तुओं का खुलासा करना, या ईजेबी 3 का उपयोग करना।

विभिन्न दृष्टिकोणों में उनके सभी मुद्दे हैं, और हम हल्के तरीके की तलाश में हैं।

इसे हल करने के तरीके पर कोई सुझाव?

संपादित करें: मैं मुझे थोड़ी विस्तृत करने का अनुरोध टिप्पणियां आईं, तो यहाँ जाता है:

मुख्य समस्या यह है कि हम को हल करना चाहते हैं कि हम हाइबरनेट उसमें केवल एक ही रखना चाहते हैं। यह उसी डेटासोर्स के साथ काम कर रहे कई क्लाइंट अनुप्रयोगों को चलाते समय हाइबरनेट के दूसरे स्तर के कैश की अमान्यता के साथ समस्याओं के कारण है। साथ ही, व्यवसाय/डीएओ/हाइबरनेट स्टैक बल्कि बड़ा हो रहा है, इसलिए इसे डुप्लिकेट करने से अधिक समझ में आता है।

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

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

हमने अभी तक ईजेबी में बहुत कुछ नहीं देखा है, लेकिन पहले के बाद दो कोशिशें मैं सोच रहा हूं कि क्या हम जो हासिल करने की कोशिश कर रहे हैं वह सब संभव है।

हम जो हासिल करने की कोशिश कर रहे हैं उसे समेकित करने के लिए: एक जेबॉस उदाहरण, कई वेब ऐप्स डीएओ परत और हाइबरनेट के शीर्ष पर व्यावसायिक वस्तुओं के एक ढेर का उपयोग करते हैं।

सादर,

निल्स

+0

क्या आप टिप्पणी कर सकते हैं 1. आप किस समस्या को हल करने की कोशिश कर रहे हैं; 2. आपके द्वारा उल्लेखित संबंधित दृष्टिकोणों के साथ मिले मुद्दे। यह एक अधिक केंद्रित उत्तर की अनुमति देगा ... – johnstok

+0

इसे 300 वर्णों में कहना मुश्किल था, इसलिए मैंने अधिक विवरण जोड़ने के लिए प्रश्न संपादित किया :-) –

उत्तर

5

क्या वेब अनुप्रयोग उसी सर्वर पर तैनात हैं?

मैं वसंत के लिए बात नहीं कर सकता, लेकिन सत्र बीन्स का उपयोग करके ईजेबी स्तर पर अपने व्यापार तर्क को स्थानांतरित करना सीधा है।

आवेदन संगठन सीधे आगे है। तर्क सत्र बीन्स में जाता है, और इन सत्र बीन्स को एक ईजेबी-जेआर.एक्सएमएल फ़ाइल (ईजेबी 3 में, यह संभवत: खाली हो जाएगा) के साथ जावा ईई आर्टिफैक्ट के रूप में एक जार के भीतर बंडल किया जाता है।

फिर एंटिटी क्लासेस को एक अलग जार फ़ाइल में बंडल करें।

अगला, आप प्रत्येक वेब ऐप को अपनी स्वयं की WAR फ़ाइल में बना देंगे।

अंत में, सभी जार और युद्ध जावा ईई ईएआर में संबंधित अनुप्रयोग.एक्सएमएल फ़ाइल के साथ बंडल किए जाते हैं (फिर से, यह संभवतः ईएआर में जारों की गणना करने के लिए काफी कम होगा)।

यह ईएआर ऐप सर्वर पर थोक तैनात किया गया है।

प्रत्येक युद्ध प्रभावी ढंग से स्वतंत्र है - अपने स्वयं के सत्र, वहां अपने संदर्भ पथ आदि हैं, लेकिन वे आम ईजेबी बैक एंड साझा करते हैं, इसलिए आपके पास केवल एक ही द्वितीय स्तर का कैश है।

आप स्थानीय संदर्भों का भी उपयोग करते हैं और ईजेबी से बात करने के लिए अर्थपूर्ण कॉलिंग करते हैं क्योंकि वे एक ही सर्वर में हैं। यहां दूरस्थ कॉल की आवश्यकता नहीं है।

मैं इस बहुत अच्छी तरह से आपको आ रही समस्या को हल करती है, और इसके EJB के साथ 3.

इसके अलावा, जावा EE 5 में काफी सरल है आप अभी भी, अपने काम के ज्यादा के लिए वसंत के रूप में उपयोग कर सकते हैं मैं समझता हूँ लगता है , लेकिन मैं एक वसंत व्यक्ति नहीं हूं इसलिए मैं विवरण से बात नहीं कर सकता।

+0

हां, सबकुछ उसी सर्वर पर तैनात किया गया है। यह काफी रोचक लग रहा है, मैं आज ईजेबी को एक शॉट दूंगा। वसंत के बारे में मेरा मुद्दा यह है कि यह उदाहरण के लिए सेम लपेटने की पेशकश करता है बिना किसी कोड के जेएमएक्स, लेकिन स्पष्ट रूप से ईजेबी के लिए नहीं। वैसे भी, मैं आज ईजेबी दृष्टिकोण को देखता हूं। –

-1

JBossCache पर एक नजर डालें। यह आपको mulitple JVM उदाहरणों (समान बॉक्स या अलग) के बीच डेटा के मानचित्रों को आसानी से साझा/दोहराने की अनुमति देता है। इसका उपयोग करना आसान है और इसमें बहुत से वायर लेवल प्रोटोकॉल विकल्प हैं (टीसीपी, यूडीपी मल्टीकास्ट, आदि)।

3

Terracotta यहां एक अच्छा फिट हो सकता है (प्रकटीकरण: मैं टेराकोटा के लिए एक डेवलपर हूं)। टेराकोटा पारदर्शी रूप से JVM स्तर पर जावा ऑब्जेक्ट्स क्लस्टर करता है, और स्प्रिंग और हाइबरनेट दोनों के साथ एकीकृत करता है। यह मुफ़्त और खुला स्रोत है।

जैसा कि आपने कहा था, एक एल 2 कैश का उपयोग कर एक से अधिक क्लाइंट वेब ऐप की समस्या उन कैशों को सिंक में रख रही है। टेराकोटा के साथ आप एक ही हाइबरनेट एल 2 कैश क्लस्टर कर सकते हैं। प्रत्येक क्लाइंट नोड उस क्लस्टर कैश की प्रतिलिपि के साथ काम करता है, और टेराकोटा इसे सिंक में रखता है। This link और बताते हैं।

अपनी व्यावसायिक वस्तुओं के लिए, आप अपने बीन्स को क्लस्टर करने के लिए टेराकोटा के Spring integration का उपयोग कर सकते हैं - प्रत्येक वेब ऐप क्लस्टर्ड बीन उदाहरण साझा कर सकता है, और टेराकोटा क्लस्टरर्ड स्थिति को पारदर्शी रूप से सिंक में रखता है।

0

मुझे सच में यकीन नहीं है कि आप क्या हल करने की कोशिश कर रहे हैं; दिन के अंत में प्रत्येक जेवीएम या तो ऑब्जेक्ट्स के दोहराए गए उदाहरण, या किसी अन्य (तार्किक) सर्वर पर मौजूद वस्तुओं का प्रतिनिधित्व करने वाले स्टब्स होगा।

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

दूसरा विकल्प साझा कैश आर्किटेक्चर के कुछ रूपों का उपयोग करना है ... जो सर्वर के बीच ऑब्जेक्ट परिवर्तनों को सिंक्रनाइज़ करेगा, लेकिन आपके पास अभी भी दो उदाहरण हैं।

+0

ऐसा नहीं है यदि आप टेराकोटा –

2

असल में, यदि आप हल्के समाधान चाहते हैं और लेनदेन या क्लस्टरिंग की आवश्यकता नहीं है तो बस आरएमआई के लिए वसंत समर्थन का उपयोग करें। यह नवीनतम संस्करणों में सरल एनोटेशन का उपयोग करके स्प्रिंग बीन्स को दूरस्थ रूप से बेनकाब करने की अनुमति देता है। http://static.springframework.org/spring/docs/2.0.x/reference/remoting.html देखें।

+0

का उपयोग करते हैं तो मैंने वेबपैप से साझा स्प्रिंग बीन्स तक पहुंचने के लिए इस दृष्टिकोण का उपयोग किया है। यह काम करता है हालांकि मुझे अभी भी लगता है कि शायद एक बेहतर/क्लीनर समाधान है। – Mark

+0

यदि आपको आरएमआई पसंद नहीं है, तो स्प्रिंग कुछ अन्य रिमोटिंग विकल्प प्रदान करता है - हेसियन, बर्लप, और एचटीपीइवॉकर (स्प्रिंग का कस्टम रिमोटिंग समाधान - HTTP पर जावा क्रमबद्धता)। बेशक हमेशा वेब सेवाएं भी होती हैं। –

1

अभी तक आपके उत्तरों के लिए धन्यवाद। हम अभी भी काफी नहीं हैं, लेकिन हमने कुछ चीजों को आजमाया है और चीजों को और स्पष्ट रूप से देखा है। यहां एक छोटा अपडेट है:

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

हमने जेएनडीआई मार्ग भी आजमाया है, जो सभी साझा इंटरफेस के लिए स्टब्स की आवश्यकता के साथ समाप्त होता है। यह बहुत परेशानी की तरह लगता है, इस बात पर विचार करते हुए कि सब कुछ एक ही सर्वर पर है।

कल, हमारे पास जेएमएक्स के साथ एक छोटा ब्रेक था। यद्यपि जेएमएक्स निश्चित रूप से इस तरह के उपयोग के लिए नहीं है, हमने साबित कर दिया है कि यह किया जा सकता है - बिना कोड परिवर्तन और न्यूनतम मात्रा में एक्सएमएल (एमबीनएक्सपोर्टर और एमबीनप्रोक्सी फैक्ट्रीबीन के लिए वसंत के लिए आपका बड़ा धन्यवाद)। इस विधि में प्रमुख दोष प्रदर्शन हैं और तथ्य यह है कि हमारे डोमेन वर्ग को JBoss 'सर्वर/lib फ़ोल्डर के माध्यम से साझा किया जाना चाहिए। यानी, हमें अपने डब्ल्यूएआर से कुछ निर्भरताओं को हटाना होगा और उन्हें सर्वर/lib पर ले जाना होगा, अन्यथा हमें क्लासकास्ट अपवाद प्राप्त होता है जब व्यापार परत हमारे डोमेन मॉडल से वस्तुएं लौटाती है। मैं पूरी तरह समझता हूं कि ऐसा क्यों होता है, लेकिन यह हासिल करने के लिए हम आदर्श नहीं हैं।

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

+0

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

2

आपको टेराकोटा संदर्भ वेब अनुप्रयोग - परीक्षक को देखना चाहिए। इसमें अधिकांश घटक हैं जिन्हें आप ढूंढ रहे हैं - इसे एक MySQL बैकएंड के साथ हाइबरनेट, जेपीए और स्प्रिंग मिला है।

यह 16 नोड्स, 20k समवर्ती उपयोगकर्ताओं तक पहुंचने के लिए पूर्व-ट्यून किया गया है।

यहाँ देखें: http://reference.terracotta.org/examinator

1

वसंत एकीकरण मुद्दा यह है कि आप के लिए ब्याज की हो सकती है है। यह आपको ईजेबी से वसंत बीन्स तक पहुंचने में सक्षम बनाता है।