के बीच वेब-स्तरीय कोड (नियंत्रक और जेएसपी) साझा करने के लिए सर्वोत्तम अभ्यास मैं कुछ उम्र बढ़ने वाले वेब अनुप्रयोगों को फिर से लिखने पर काम कर रहा हूं। विशेष रूप से दो हैं जो बहुत ही समान हैं, फिर भी आज कोई कोड साझा नहीं करते हैं और मैं इसे ठीक करना चाहता हूं।समान वेब ऐप्स
परियोजनाओं को मेवेन, स्प्रिंग एमवीसी और साइटमेश के साथ फिर से लिखा जा रहा है।
मॉडल स्तरीय कोड JAR का उपयोग करके साझा करने के लिए काफी आसान है। लेकिन मुझे समान ऐप्स के बीच सामान्य वेब-स्तरीय कोड (जेएसपी और नियंत्रक) साझा करने के किसी भी अच्छे तरीके से नहीं पता है।
यहां कुछ पृष्ठभूमि है। ये ऐप्स वेबस्टोर हैं। एक सामान्य दुकान है (amazon.com सोचें) कि कोई उपयोगकर्ता साइन इन कर सकता है, उत्पादों को खोज सकता है, एक शॉपिंग कार्ट में जोड़ सकता है, और चेक आउट कर सकता है। दूसरा मूल रूप से वही बात है, केवल यह एक पंचआउट साइट है। उत्पाद ब्राउज़ और शॉपिंग कार्ट भाग समान हैं। साइन इन और चेकआउट, हालांकि, पूरी तरह से अलग हैं।
मैं oversimplifying हूँ, लेकिन समस्या को स्पष्ट करने के लिए पर्याप्त है। उत्पाद ब्राउज़ और शॉपिंग कार्ट अनुभागों में वेब-स्तरीय कोड का एक महत्वपूर्ण हिस्सा है जो दोनों के बीच साझा किया जा सकता है।
मुझे नहीं लगता कि बस एक ही वैर फ़ाइल को एक मानक चर या किसी भिन्न डेटाबेस से सेटिंग्स के आधार पर "मोड" के रूप में चलाना संभव है। मतभेदों में से एक एक पूरी तरह से अलग वसंत सुरक्षा विन्यास है। अन्य साइट के साइन-इन और चेकआउट नियंत्रकों को घटक-स्कैन से बाहर छोड़ना भी बेहतर होगा ताकि यूआरएल मैनिपुलेशन के साथ कोई भी गलत तरीके से पार न हो।
मैंने मूल रूप से मैवेन प्रोफाइल का उपयोग शुरू किया और उसी WAR प्रोजेक्ट में दो अलग-अलग कॉन्फ़िगरेशन सेट (web.xml, spring configs, आदि) रखने के लिए फ़िल्टरिंग शुरू की। जिस मेवेन प्रोफाइल का चयन किया जाता है, उसके परिणामस्वरूप WAR एक अलग कॉन्फ़िगरेशन सेट (और स्पष्टता के लिए एक अलग नाम) के साथ बनाया गया है। यह मेवेन प्रिंसिपल का उल्लंघन करता है कि एक पोम एक आर्टिफैक्ट पैदा करता है।
वहाँ यह करने के लिए एक बेहतर तरीका है? मेवेन युद्ध ओवरले के बारे में क्या? मैं लोगों को सीएसएस, जेएस, छवियों, और यहां तक कि कुछ सामान्य जेएसपी जैसे सामान्य संसाधनों को साझा करने के लिए ओवरले का उपयोग करने के बारे में बात करता हूं। लेकिन मुझे कोई भी इस तरह नियंत्रकों की तरह कक्षाओं को साझा करने का उल्लेख नहीं करता है।
मैं नियंत्रक कक्षाओं को जारों तक दबा सकता हूं, लेकिन तर्कसंगत रूप से ऐसा लगता है कि उन्हें अपने संबंधित जेएसपी के साथ रहना चाहिए। और जेएसपी को जारों को भी धक्का नहीं दिया जा सकता है (दाएं?)।
मैंने इसे एक ईएआर बनाने के बारे में भी सोचा था जिसमें कई WAR फ़ाइलें शामिल हैं - आम खरीदारी अनुभव के लिए एक युद्ध, और उचित साइन-इन और चेकआउट के लिए एक और युद्ध। मेरा मानना है कि सत्र को उसी ईएआर में दो डब्ल्यूएआर के बीच साझा किया जा सकता है, लेकिन मुझे यकीन नहीं है कि यह स्प्रिंग के सत्र-स्कोप बीन्स के साथ अच्छा खेलता है या नहीं। मैंने सुना है कि वे वास्तव में सत्र में संग्रहीत नहीं हैं। मुझे यह भी पता लगाना होगा कि शीर्षलेख/पाद लेख के लिए उपयोग किए जाने वाले साइटमैश सजावटी के बारे में क्या करना है। वही साइटमैश कॉन्फ़िगरेशन और उसके संसाधनों को दोनों WARs में कॉपी करने की आवश्यकता होगी, है ना? तो अंत में, शॉपिंग युद्ध कलाकृति अभी भी प्रत्येक परिस्थिति में अलग होगी।
मुझे विश्वास करना है कि अन्य लोगों ने इससे पहले निपटाया है। क्या मैं इसके बारे में गलत तरीके से सोच रहा हूं? क्या इस तरह की चीज के लिए कोई आम समाधान है?
यह एक साफ चाल है, और मैं इसके साथ sinc ई मैं कभी भी मेवेन छोड़ने को नहीं देखता हूं। एक नीचे की ओर जो तुरंत स्पष्ट हो गया है कि अगर डेवलपर्स जार से बाहर निकलता है तो डेवलपर्स फ्लाई पर जेएसपी अपडेट नहीं कर सकते हैं। एक साधारण संपादन देखने के लिए आईडीई से पुनर्निर्माण और पुनर्वितरण लेता है। मुझे संदेह है कि इसके बारे में कुछ भी किया जा सकता है, लेकिन यदि आपके पास कोई विचार है तो मैं सभी कान हूं। – KevinF
खैर ... आप संभवतः सिम्लिंक के साथ कुछ गंदी कर सकते हैं, इस पर निर्भर करते हुए कि आप अपने विकास पर्यावरण को अंतिम आर्टिफैक्ट से अलग कैसे कर सकते हैं। या, यदि आप एक विस्फोटित युद्ध का उपयोग कर रहे हैं, तो प्रत्येक जेएसपी परिवर्तन के बाद अपने आप को एकल मैवेन 'अनपैक' लक्ष्य चलाने में लंबा समय नहीं लगता है। – artbristol