मुझे पता है कि इस विषय से संबंधित कुछ प्रश्न पहले से ही हैं लेकिन मुझे अभी तक एक वास्तविक समाधान नहीं मिला।ओएसजीआई और ईई 6 के साथ एंटरप्राइज़ एप्लिकेशन को मॉड्यूलर कैसे करें?
EE6 साथ वर्तमान में मैं विकासशील हूँ आवेदन, जेपीए, CDI, JSF का उपयोग कर। मैं सब कुछ एक तार या ईएआर में पैकेजिंग की तुलना में अधिक मॉड्यूलर दृष्टिकोण लेना चाहता हूं और पूरी चीज को एप्लिकेशन सर्वर पर तैनात करना चाहता हूं।
मैं 3 Maven परियोजनाओं में एक मॉड्यूल को अलग करके संभव के रूप में मॉड्यूलर के रूप में मेरे अनुप्रयोगों डिजाइन करने के लिए कोशिश कर रहा हूँ:
- एपीआई - के लिए जेपीए संस्थाओं शामिल - (स्टेटलेस) सेवाओं के लिए इंटरफेस
- मॉडल शामिल विशिष्ट मॉड्यूल
- Impl - एपीआई के कार्यान्वयन, ज्यादातर CDI सेम
हर मॉड्यूल को देखते तर्क वर्तमान में एक बड़ा भीतर bundeled है शामिल वेब प्रोजेक्ट, जो बदसूरत है। मैंने पहले ही वेब fragmets के बारे में सोचा था, लेकिन अगर मैं जार फ़ाइलों में अपनी बीन कक्षाओं और एक्सएचटीएमएल फाइलों को फैलाता हूं, तो मुझे एक हुक लागू करना होगा ताकि संसाधनों को मूल वेब एप्लिकेशन द्वारा देखा जा सके। इस प्रकार का समाधान कम से कम मुझे प्रति मॉड्यूल चौथा प्रोजेक्ट करने में सक्षम करेगा जिसमें मॉड्यूल से संबंधित सभी व्यू तर्क शामिल होंगे, जो एक अच्छी शुरुआत है।
मैं क्या चाहता हूँ मैं परियोजनाओं के उन 4 प्रकार हो सकता है कि न केवल, लेकिन यह भी है कि हर परियोजना गर्म swappable है। इससे मुझे ओएसजीआई का नेतृत्व हुआ, जो वास्तव में तब तक अच्छा था जब तक मुझे एहसास हुआ कि ईईजीआई कंटेनर के भीतर ईई 6 प्रौद्योगिकियों का बहुत अच्छा समर्थन नहीं है।
जेपीए
के जेपीए पर पहली नजर डालते हैं। कुछ ट्यूटोरियल [1] हैं जो बताते हैं कि जेपीए सक्षम ओएसजीआई बंडल कैसे बनाया जाए, लेकिन इनमें से कोई भी ट्यूटोरियल दिखाता है कि विभिन्न बंडलों (मॉड्यूल की मॉडल प्रोजेक्ट) में इकाइयों को कैसे फैलाया जाए। मैं तीन अलग-अलग मॉड्यूल
उदाहरण के लिए चाहेगा- कोर
- उपयोगकर्ता
- ब्लॉग
ब्लॉग मॉड्यूल के मॉडल परियोजना एक (संकलन समय) मॉडल परियोजना पर निर्भरता है उपयोगकर्ता का उपयोगकर्ता मॉड्यूल की मॉडल प्रोजेक्ट में कोर की मॉडल प्रोजेक्ट पर एक (संकलन-समय) निर्भरता है।
मैं कैसे एक मॉड्यूल की एक मॉडल परियोजना के लिए एक हठ यूनिट बनाए बिना ऐसे परिदृश्य में जेपीए काम कर सकते हैं? मैं एक दृढ़ता इकाई चाहता हूं जो रनटाइम पर उपलब्ध सभी इकाइयों से अवगत है। मॉडल परियोजनाएं जिनमें संस्थाएं निश्चित रूप से गर्म होनी चाहिए। हो सकता है कि मुझे प्रत्येक क्लाइंट के लिए एक अलग परियोजना बनाने की आवश्यकता होगी जो परियोजनाओं की सभी आवश्यक इकाइयों को आयात करे और इसमें एक persistence.xml शामिल है जिसमें सभी आवश्यक कॉन्फ़िगरेशन चीजें शामिल हों। क्या इस मुद्दे को हल करने के लिए ऐसी परियोजनाओं या यहां तक कि अन्य दृष्टिकोण बनाने के लिए कोई उपलब्ध मेवेन प्लगइन्स उपलब्ध हैं?
CDI
CDI बहुत अच्छा है। मैं वास्तव में इसे प्यार करता हूँ और मैं इसे और याद नहीं करना चाहता! मैं सीडीआई एक्सटेंशन का उपयोग करता हूं जैसे माईफैस सीओडीआई और डेल्टास्पीइक जो कमाल हैं! मैं अपनी (स्टेटलेस) सेवाओं को अन्य सेवाओं में या दृश्य परत में इंजेक्ट करता हूं जो कि बहुत बढ़िया है। चूंकि मेरी सेवाएं स्टेटलेस हैं, इसलिए उन्हें ओएसजीआई सेवाओं के रूप में उपयोग करने में कोई समस्या नहीं होनी चाहिए, लेकिन ओएसजीआई में सीडीआई एकीकरण के बारे में क्या? मुझे एक ग्लासफ़िश सीडीआई एक्सटेंशन मिला [2] जो सीडीआई बीन्स में ओएसजीआई सेवाओं का इंजेक्शन होगा, लेकिन मैं यह भी चाहता हूं कि ओएसजीआई सेवाएं सीडीआई बीन्स हों। मैं पूरी तरह से यह सुनिश्चित नहीं कर रहा हूं कि इसे कैसे प्राप्त किया जाए, शायद मुझे कार्यान्वयन को तुरंत चालू करने के लिए बीनमेनगर का उपयोग करना होगा और फिर एक बंडलएक्टिवेटर के भीतर सेवा रजिस्ट्री में अपने इंटरफ़ेस के लिए प्रत्येक कार्यान्वयन को पंजीकृत करना होगा। क्या ऐसा करने का कोई मानक तरीका है? मैं ओएसजीआई ढांचे के लिए किसी भी (संकलन-समय) निर्भरताओं से बचना चाहता हूं।
मैं अपनी सेवाओं का उपयोग करना चाहूंगा जैसे कि मैं अभी भी उन्हें बिना किसी बदलाव के लागू कर सकता हूं (कार्यान्वयन एनोटेटेड नहीं है और इंजेक्शन पॉइंट योग्य नहीं हैं)। एक जेबॉस वेल्ड एक्सटेंशन/सब प्रोजेक्ट [3] है जो उस समस्या को लक्षित करने लगता है लेकिन यह निष्क्रिय है, मुझे कोई भी सर्वोत्तम प्रथा या कैसे-नहीं मिल सकता है। मैं अपना कार्यान्वयन कैसे छोड़ सकता हूं क्योंकि यह अभी भी ओएसजीआई का उपयोग करने में सक्षम है? मेरा मतलब यह है कि कार्यान्वयन के लिए एनोटेशन जोड़ने का एक बड़ा सौदा नहीं होगा क्योंकि प्रत्येक कार्यान्वयन पहले से ही एक स्टीरियोटाइप एनोटेशन के साथ एनोटेटेड है, वैसे भी मैं इसे रोकना चाहता हूं।
JSF
उल्लेख किया है इससे पहले कि मैं बुद्धिमान मेरे विचार तर्क मॉड्यूल प्रसार करने के लिए सक्षम होने के लिए करना चाहते हैं। जहां तक मुझे पता है कि यह वास्तव में बॉक्स से बाहर नहीं है। पैक्स वेब [4] किसी भी तरह हल करना चाहिए, लेकिन मैं इससे परिचित नहीं हूं।
मैं मॉड्यूल "कोर" में एक "कोरवेब" प्रोजेक्ट करना चाहता हूं जिसमें फेसलेट टेम्पलेट है, चलिए इसे "template.xhtml" कहते हैं। मॉड्यूल "ब्लॉग" में "ब्लॉगवेब" नामक एक प्रोजेक्ट में एक जेएसएफ पृष्ठ तब उस टेम्पलेट को संदर्भित करने और एक रचना लागू करने में सक्षम होना चाहिए।
दृश्य को विस्तारित करने में सक्षम होने के लिए मैं एक जावा इंटरफेस "एक्सटेंशन" पेश करूंगा जिसे मॉड्यूल के एक विशिष्ट वर्ग द्वारा कार्यान्वित किया जा सकता है। एक दृश्य के लिए एक नियंत्रक तब विस्तार के सभी कार्यान्वयन इंजेक्ट करेगा। एक एक्सटेंशन उदाहरण के लिए उप-दृश्यों की एक सूची प्रदान करेगा जो मुख्य दृश्य में शामिल किया जाएगा।
वर्णित विस्तार प्रणाली आसानी से लागू किया जा सकता है, लेकिन निम्न आवश्यकताओं को पूरा किया जाना चाहिए:
- उपलब्ध जब अनुप्रयोग सर्वर के लिए नए OSGi बंडल जोड़ने, उपलब्ध एक्सटेंशन बदल सकता है के सेट, एक्सटेंशन होना चाहिए दृश्य के नियंत्रक के लिए।
- उप-दृश्य (एक अलग बंडल से) जिसे मुख्य दृश्य में शामिल किया जाना चाहिए, वह सुलभ होना चाहिए।
एक भी मेजबान लेकिन वसंत स्लाइस के कई टुकड़ा आवेदनों की अवधारणा [5] बहुत ही दिलचस्प है, लेकिन वसंत डीएम सर्वर तक ही सीमित लगता है और इस परियोजना भी निष्क्रिय हो रहा है।
सारांश
सभी उदाहरणों और व्यवहार मैं वर्णित मुझे आशा है कि आप जानते हैं कि मैं हासिल करना चाहते हैं के बाद। यह बस एक ईई 6 ऐप है जो बहुत गतिशील और मॉड्यूलरकृत है।
जो मैं अंत में देखता हूं वह कम से कम प्रलेखन है कि मैं सबकुछ कैसे प्राप्त कर सकता हूं क्योंकि मैं इसकी अपेक्षा करता हूं या इससे पहले से ही एक बेहतर समाधान कर रहा हूं!
[1] http://jaxenter.com/tutorial-using-jpa-in-an-osgi-environment-36661.html
[2] https://blogs.oracle.com/sivakumart/entry/typesafe_injection_of_dynamic_osgi
[3] http://www.slideshare.net/TrevorReznik/weldosgi-injecting-easiness-in-osgi
[4] http://team.ops4j.org/wiki//display/paxweb/Pax+Web
[5] https://jira.springsource.org/browse/SLICE
कोर मॉड्यूल में उपलब्ध इकाइयों के लिए सामान्य पहुंच भी है, इसलिए मेरे पास बिल्कुल एक पीयू होना चाहिए, लेकिन अगर मुझे उन्हें एक जार फ़ाइल में पैकेज करने की आवश्यकता नहीं है तो यह अच्छा होगा। शायद कुछ मेवेन प्लगइन्स हैं जो पैकेजिंग करेंगे, लेकिन आईएमओ यह किसी भी तरह ओएसजीआई जैसी नहीं है। मैंने पहले से ही ब्लूप्रिंट के कुछ उदाहरणों को देखा है और मुझे एक्सएमएल कॉन्फ़िगरेशन की गैर-टाइपफैटी पसंद नहीं है। यदि कोई अन्य विकल्प नहीं है, तो मुझे शायद इसका उपयोग करना होगा या स्वयं को एक सीडीआई समाधान लागू करना होगा। –
ईसाई, क्या आपको अपने मॉड्यूलर एप्लिकेशन के लिए कोई प्रीफेक्ट समाधान मिला। क्या आप मेरे साथ साझा कर सकते हैं मुझे एक ही समस्या है? – Suraj
मुझे उस पर कोई सीधा समाधान नहीं मिला। मैं जावा 9 (आरा) और एक ईई रिलीज के लिए इंतजार कर रहा हूं जो मॉड्यूल का उपयोग करता है। जेपीए परियोजनाओं के लिए वर्तमान समाधान: एक दृढ़ता परियोजना का उपयोग करें जिसमें submodules की orm.xml फ़ाइलें शामिल हैं। सीडीआई परियोजनाओं के लिए वर्तमान समाधान: निर्भरताओं को जोड़ने के दौरान परियोजनाओं को अलग करें और देखभाल करें। वेब प्रोजेक्ट के लिए वर्तमान समाधान: सबप्रोजेक्ट्स में संभव होने पर सामान को अलग करें और निर्माण में सब कुछ गठबंधन करें। यदि आप नए मॉड्यूल जोड़ना चाहते हैं या एप्लिकेशन में सभी मॉड्यूल डालना चाहते हैं तो पुनर्निर्माण करें, लेकिन केवल सबसेट दिखाएं। –