पूरी सेवा को फिर से शुरू किए बिना मैं टॉमकैट वेबएप कैसे अपडेट करूं?


93

मैं नया हूँ Tomcat। हमारे पास एक देव मशीन है जिसमें लगभग 5 ऐप चल रहे हैं। हालांकि यह देव है, इसका उपयोग हमारे ग्राहकों द्वारा परीक्षण के दौरान बहुत अधिक किया जाता है।

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

बेशक, यह कुछ लोगों को परेशान करता है क्योंकि यह सभी ऐप्स के लिए सत्रों में लॉग इन को नष्ट कर देता है।

क्या ऐसा करने के लिए इससे अच्छा तरीका है? मेरा मतलब है, वहाँ एक रास्ता केवल फिर से लोड करने के लिए है क्लास कि देव मशीन पर सब कुछ करने के बजाय बदल?

धन्यवाद।


फ़ाइल करने के लिए बनी रहने वाली चीज़ के लिए अपना सत्र प्रबंधन बदलें? सॉरी विरोध नहीं कर सका :)
rogerdpack

1
@rogerdpack मैंने टॉमकैट के बारे में बहुत कुछ सीखा है क्योंकि मैंने यह सवाल छह साल पहले पूछा था। लेकिन फिर भी धन्यवाद।
cbmeeks

हॉट स्वैपिंग के बारे में सिर्फ कक्षाएं, देखें stackoverflow.com/questions/32459047/…
rogerdpack

जवाबों:


59

क्या आपने टॉमकैट के प्रबंधक एप्लिकेशन का उपयोग करने की कोशिश की है ? यह आपको टॉमकैट को बंद करने के साथ युद्ध फ़ाइलों को अनप्लग / तैनात करने की अनुमति देता है।

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

यदि आप विंडोज पर टॉमकैट चला रहे हैं, तो आपको विभिन्न फ़ाइलों को लॉक नहीं करने के लिए अपने संदर्भ को कॉन्फ़िगर करने की आवश्यकता हो सकती है ।

यदि आपके पास कोई डाउनटाइम नहीं है, तो आप Tomcat 7 की समानांतर तैनाती को देखना चाह सकते हैं। आप एक ही समय में एक ही संदर्भ पथ के साथ एक वेब अनुप्रयोग के कई संस्करणों को तैनात कर सकते हैं। संदर्भ संस्करण के अनुरोधों का मिलान करने के लिए उपयोग किए जाने वाले नियम इस प्रकार हैं:

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

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

1
@cbmeeks - यह इस बात पर निर्भर करता है कि ये छोटे-मोटे सुधार कितनी बार होते हैं, और कितने समय पहले किसी ने नोटिस किया है। किसी भी स्थिति में, आवेदन के अनुपलब्ध होने की थोड़ी मात्रा होगी। यह आपके हार्डवेयर / एप्लिकेशन पर निर्भर करता है कि वह समय कितना लंबा है। लेकिन यह सेकंड में मापा जाता है, मैं आमतौर पर 5-10 हमारे अनुप्रयोगों पर कहूंगा। लेकिन आपका माइलेज अलग हो सकता है :)
स्टीव के

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

5
जब पुनः आरंभ किए बिना रिडेप्लिंग करते हैं, तो आपको मेमोरी लीक से सावधान रहना होगा - बहुत बार क्लास लोडर संदर्भों को लीक करेंगे और आपको एप्लिकेशन के पुराने संस्करण से मेमोरी को मुक्त करने के लिए पूरी टॉमकैट प्रक्रिया को पुनरारंभ करने की आवश्यकता होगी। LiveRebel (दूसरे उत्तर में उल्लिखित) आपके लिए वह सब स्वचालित कर सकता है।
नीम प्रक्षेत्र

3
आपको युद्ध को हटाने की आवश्यकता नहीं है। बस पुराने युद्ध की नकल करें और कुछ सेकंड प्रतीक्षा करें।
peceps

30

कई आसान तरीके हैं।

  1. बस किसी भी webapp के web.xml को टच करें।

    touch /usr/share/tomcat/webapps/<WEBAPP-NAME>/WEB-INF/web.xml
    

आप WEB-INF / lib में एक विशेष जार फ़ाइल को अपडेट कर सकते हैं और फिर पूरी युद्ध फ़ाइल बनाने और उसे फिर से लागू करने के बजाय web.xml को स्पर्श कर सकते हैं।

  1. Webapps / Your_WEB_APP निर्देशिका को हटा दें, Tomcat 5 सेकंड के भीतर युद्ध की तैनाती शुरू कर देगा (यह मानते हुए कि आपकी युद्ध फ़ाइल अभी भी वेबैप फ़ोल्डर में मौजूद है)।

  2. आम तौर पर नए संस्करण के साथ ओवरराइटिंग वॉर फ़ाइल को स्वचालित रूप से टॉमकैट द्वारा रीडेपॉल्ड किया जाता है। यदि नहीं, तो आप ऊपर बताए अनुसार web.xml को छू सकते हैं।

  3. एक पहले से ही फट "निर्देशिका" पर कॉपी अपने webapps फ़ोल्डर में


1
यह जानने के लिए उपयोगी है कि 'स्पर्श' पद्धति कक्षाओं को फिर से लोड नहीं करती है। IOW, यह वेबपेज के लिए क्लास लोडर पदानुक्रम को शुद्ध नहीं करता है और पुनः लोड नहीं करता है
रोंडो

2
यह देखने के लिए कि यह काम क्यों पढ़ सकता है $CATALINA_BASE/conf/context.xml। WEB-INF / web.xml परिवर्तनों के लिए देखा जाता है। अन्य संसाधनों को आसानी से आवश्यकतानुसार सूचीबद्ध किया जा सकता है।
केविन

21

Apache tomcat की conf डाइरेक्टरी में आप reference.xml फ़ाइल पा सकते हैं। उस संपादित टैग में < संदर्भ पुनः लोड करने योग्य = "सत्य" > के रूप में। यह समस्या को हल करना चाहिए और आपको सर्वर को पुनरारंभ करने की आवश्यकता नहीं है


इसके बजाय प्रबंधक आवेदन को प्राथमिकता दें। यह राम के लिए एक महंगा ऑपरेशन है।
सॉर्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.