2012-03-07 11 views
10

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

परियोजनाओं को मेवेन, स्प्रिंग एमवीसी और साइटमेश के साथ फिर से लिखा जा रहा है।

मॉडल स्तरीय कोड JAR का उपयोग करके साझा करने के लिए काफी आसान है। लेकिन मुझे समान ऐप्स के बीच सामान्य वेब-स्तरीय कोड (जेएसपी और नियंत्रक) साझा करने के किसी भी अच्छे तरीके से नहीं पता है।

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

मैं oversimplifying हूँ, लेकिन समस्या को स्पष्ट करने के लिए पर्याप्त है। उत्पाद ब्राउज़ और शॉपिंग कार्ट अनुभागों में वेब-स्तरीय कोड का एक महत्वपूर्ण हिस्सा है जो दोनों के बीच साझा किया जा सकता है।

मुझे नहीं लगता कि बस एक ही वैर फ़ाइल को एक मानक चर या किसी भिन्न डेटाबेस से सेटिंग्स के आधार पर "मोड" के रूप में चलाना संभव है। मतभेदों में से एक एक पूरी तरह से अलग वसंत सुरक्षा विन्यास है। अन्य साइट के साइन-इन और चेकआउट नियंत्रकों को घटक-स्कैन से बाहर छोड़ना भी बेहतर होगा ताकि यूआरएल मैनिपुलेशन के साथ कोई भी गलत तरीके से पार न हो।

मैंने मूल रूप से मैवेन प्रोफाइल का उपयोग शुरू किया और उसी WAR प्रोजेक्ट में दो अलग-अलग कॉन्फ़िगरेशन सेट (web.xml, spring configs, आदि) रखने के लिए फ़िल्टरिंग शुरू की। जिस मेवेन प्रोफाइल का चयन किया जाता है, उसके परिणामस्वरूप WAR एक अलग कॉन्फ़िगरेशन सेट (और स्पष्टता के लिए एक अलग नाम) के साथ बनाया गया है। यह मेवेन प्रिंसिपल का उल्लंघन करता है कि एक पोम एक आर्टिफैक्ट पैदा करता है।

वहाँ यह करने के लिए एक बेहतर तरीका है? मेवेन युद्ध ओवरले के बारे में क्या? मैं लोगों को सीएसएस, जेएस, छवियों, और यहां तक ​​कि कुछ सामान्य जेएसपी जैसे सामान्य संसाधनों को साझा करने के लिए ओवरले का उपयोग करने के बारे में बात करता हूं। लेकिन मुझे कोई भी इस तरह नियंत्रकों की तरह कक्षाओं को साझा करने का उल्लेख नहीं करता है।

मैं नियंत्रक कक्षाओं को जारों तक दबा सकता हूं, लेकिन तर्कसंगत रूप से ऐसा लगता है कि उन्हें अपने संबंधित जेएसपी के साथ रहना चाहिए। और जेएसपी को जारों को भी धक्का नहीं दिया जा सकता है (दाएं?)।

मैंने इसे एक ईएआर बनाने के बारे में भी सोचा था जिसमें कई WAR फ़ाइलें शामिल हैं - आम खरीदारी अनुभव के लिए एक युद्ध, और उचित साइन-इन और चेकआउट के लिए एक और युद्ध। मेरा मानना ​​है कि सत्र को उसी ईएआर में दो डब्ल्यूएआर के बीच साझा किया जा सकता है, लेकिन मुझे यकीन नहीं है कि यह स्प्रिंग के सत्र-स्कोप बीन्स के साथ अच्छा खेलता है या नहीं। मैंने सुना है कि वे वास्तव में सत्र में संग्रहीत नहीं हैं। मुझे यह भी पता लगाना होगा कि शीर्षलेख/पाद लेख के लिए उपयोग किए जाने वाले साइटमैश सजावटी के बारे में क्या करना है। वही साइटमैश कॉन्फ़िगरेशन और उसके संसाधनों को दोनों WARs में कॉपी करने की आवश्यकता होगी, है ना? तो अंत में, शॉपिंग युद्ध कलाकृति अभी भी प्रत्येक परिस्थिति में अलग होगी।

मुझे विश्वास करना है कि अन्य लोगों ने इससे पहले निपटाया है। क्या मैं इसके बारे में गलत तरीके से सोच रहा हूं? क्या इस तरह की चीज के लिए कोई आम समाधान है?

उत्तर

1

कॉपी-पेस्ट के खिलाफ लड़ाई करने का अच्छा काम। आप क्यों कहते हैं कि जेएसपी साझा करना मुश्किल है? आप उन्हें Maven निर्भरता प्लगइन का उपयोग कर एक साझा जार से बाहर नकल कर सकते हैं:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.4</version> 
     <executions> 
      <execution> 
      <id>unpack</id> 
      <phase>package</phase> 
      <goals> 
       <goal>unpack</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
       <artifactItem> 
        <groupId>com.example</groupId> 
        <artifactId>webapp-common</artifactId> 
        <version>1.0-SNAPSHOT</version> 
        <outputDirectory>[target jsp directory]</outputDirectory> 
        <includes>**/*.jsp</includes> 
       </artifactItem> 
       </artifactItems> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
+0

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

+0

खैर ... आप संभवतः सिम्लिंक के साथ कुछ गंदी कर सकते हैं, इस पर निर्भर करते हुए कि आप अपने विकास पर्यावरण को अंतिम आर्टिफैक्ट से अलग कैसे कर सकते हैं। या, यदि आप एक विस्फोटित युद्ध का उपयोग कर रहे हैं, तो प्रत्येक जेएसपी परिवर्तन के बाद अपने आप को एकल मैवेन 'अनपैक' लक्ष्य चलाने में लंबा समय नहीं लगता है। – artbristol

0

मेरे इस मामलों में पसंदीदा विकल्प एक जार में सभी संबंधित फ़ाइलें (नियंत्रकों, js, छवियों ...) डाल दिया है।वहाँ उन्हें प्रयोग अगर वे एक जार में कर रहे हैं का कोई आसान तरीका है: लेकिन समस्या यह है यहाँ JSP फ़ाइलों का उपयोग है। लेकिन इस तरह के रूप में वेग या Freemarker अन्य दृश्य प्रौद्योगिकियों के साथ इस एक आसान तरीका में संभव है, अन्य लाभों के साथ। मुझे नहीं पता कि इससे आपको बहुत अधिक काम मिल सकता है, लेकिन इन जरूरतों के साथ एक नई परियोजना के लिए यह सबसे अच्छा विकल्प है।

+0

दिलचस्प ... तो आप कह रहे हैं कि हम Velocity/Freemarker टेम्पलेट्स को या तो/WEB-INF/वेग या JAR से खींच सकते हैं? क्या स्प्रिंग एमवीसी के साथ पूरा करने के लिए कस्टम व्यू रीसोलवर की आवश्यकता होगी? मुझे जो उदाहरण मिल रहे हैं, वे बस/WEB-INF का संदर्भ लें। – KevinF

+0

यहां आपके पास एक अच्छा उदाहरण है: http://www.springbyexample.org/examples/velocity-email-template.html – sinuhepop

0

हम सबवर्सन यहाँ का उपयोग कर, और प्रयोग SVN रहे हैं: (एक तरह से सांकेतिक लिंक की तरह) परियोजनाओं के बीच कुछ सामान्य कोड साझा करने के लिए (ज्यादातर .jsp फ़ाइलें) में बाहरी। काफी अच्छी तरह से काम करता है, हम OC4J जो वास्तव में .jsp कई परियोजनाओं के बीच की साझा करने के लिए एक तरीका है उपयोग कर रहे थे, लेकिन जब से हम वर्तमान में बिलाव (या कुछ और) मैं यह करने के लिए एक कंटेनर नास्तिक तरह से साथ आने के लिए करना चाहता था ओर बढ़ रहे हैं।

0

Sinuhepop सही है, लेकिन उसकी जवाब सही नहीं।

यहाँ सही जवाब है। आपको यूआरएल का पालन करना होगा, यह आपको हिप कर सकता है।

click here

यूआरएल पेज में

, संपत्ति सामग्री बॉक्स के लिए उदाहरण सटीक नहीं है, तुम मुझे का पालन करें:

अगर एक फ़ाइल साझा करने की आवश्यकता:

a.jsp svn://myhome.com/svn/myproject/trunk/a.jsp 

अगर की जरूरत एक फ़ोल्डर साझा करें:

xml svn://myhome.com/svn/myproject/trunk/xml 
संबंधित मुद्दे