2015-10-02 10 views
5

में प्लगइन आर्किटेक्चर को कार्यान्वित करना मैं स्प्रिंग बूट एप्लिकेशन में प्लगइन आर्किटेक्चर को कार्यान्वित करना चाहता हूं। मुझे अपने परिदृश्य की व्याख्या करने दो। मेरे पास एक मुख्य एप्लीकेशन है, जो सर्वर से शुरू होता है, सुरक्षा का प्रबंधन करता है आदि। ऐप मेरे अंतिम उत्पाद की जड़ की तरह है जिसमें इसमें रूट रूट और अन्य प्लगइन शामिल होंगे।एनोटेशन आधारित स्प्रिंग बूट एप्लिकेशन

अब, प्लगइन्स स्प्रिंग बूट आवेदन खुद को, जो मैं गतिशील विशिष्ट रास्ते में जार की खोज करके जड़ एप्लिकेशन को जोड़ने के लिए या द्वारा पुस्तकालय के रूप में निर्भरता परियोजना के लिए उन्हें शामिल हो सकता है।

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

इस आधार यह है, अब क्या मैं जानना चाहता हूँ है,

  1. मैं इस वास्तुकला कैसे प्राप्त कर सकते हैं?
  2. रूट ऐप प्लगइन के साथ कैसे संवाद करेगा?
  3. क्या उनके पास अलग-अलग एप्लिकेशन संदर्भ होंगे?
  4. मैं रूट ऐप से बाल ऐप को बूट और कॉन्फ़िगर कैसे कर सकता हूं?
  5. जब एप्लिकेशन क्लाइंट से अनुरोध प्राप्त करता है तो मैं विशिष्ट प्लगइन के अंदर विशिष्ट नियंत्रक के अनुरोध को रूट कैसे कर सकता हूं क्योंकि मेरे पास कई प्लगइन्स हो सकते हैं।

मैं यहां अवधारणा के बारे में उलझन में हूं, और यह कैसे काम कर सकता है। किसी भी प्रकार की मदद की सराहना की जाती है। अगर कोई उदाहरण है कि कोई भी प्रदान कर सकता है, तो यह बहुत ही अद्भुत होगा।

+2

मैं इसी तरह की प्लगइन प्रणाली को लागू करने जा रहा हूं।क्या आपको एक समाधान मिला? – rvit34

उत्तर

5

तरह Java dyanmically load plugin में वर्णित आप टो विकल्प हैं:

  1. OSGi तरीका, जिसके खाते में आपके सभी सवालों लेता जा रहे हैं, लेकिन थोड़ा मुश्किल स्प्रिंग बूट
  2. के साथ गठबंधन करने के लिए एक ServiceLoader
  3. का उपयोग हो सकता है

कम से कम दूसरा दृष्टिकोण के लिए, प्रत्येक जार फ़ाइल एक ही इंटरफ़ेस है, जो आप जार फ़ाइल की सामग्री (एक OSGi बंडल के शुरू होने से विधि के समान) रजिस्टर करने के लिए उपयोग कर सकते हैं लागू करना चाहिए। इस तरह आप प्रत्येक जार फ़ाइल के लिए एप्लिकेशन संदर्भ को अलग कर सकते हैं और केवल इसे स्टार्टअप पर उपलब्ध करा सकते हैं (उदाहरण के लिए आप एक संदर्भ पदानुक्रम बना सकते हैं जिसमें आप रूट संदर्भ में जार का संदर्भ जोड़ते हैं)।

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

0

इसके दो संभावित विकल्प 1. वसंत-प्लगइन का उपयोग करके आप सुविधा का OSGi तरह प्राप्त कर सकते हैं कर रहे हैं। https://github.com/spring-projects/spring-plugin 2. मिर्को-बूट का उपयोग करना, जो वसंत बूट बैक एंड और मिर्कोज़रवर फ्रंट एंड का उपयोग करेगा। यह आपकी आवश्यकता के अनुसार प्लगइन समर्थन भी प्रदान करता है। आप https://github.com/aol/micro-server/tree/master/micro-boot

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