2011-11-28 9 views
15

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

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

यह क्यों है, और मैं इसे कैसे ठीक कर सकता हूं? मेरे आवेदन अभिलेखागार के अंदर जार बिल्कुल नहीं बदला है। जैसा कि मैं कह सकता हूं, जेबॉस संशोधित समय के रूप में तैनाती के समय या तैनाती के समय का उपयोग करता है। यदि मैं सही ढंग से समझता हूं, तो यह पिछले रनों से कैश किए गए जार का उपयोग करने की पूरी तरह से शॉर्ट-सर्किट जावा वेब स्टार्ट की क्षमता पर जा रहा है।

यदि हम कोई समस्या है तो हम जेबॉस 6 का उपयोग करते हैं। पहले हमने जेबॉस 4 का इस्तेमाल किया था। मैं यह देखना चाहता हूं कि हमें जेबॉस 4 के तहत समस्या है या नहीं, लेकिन अब हमारे पास नए जेबॉस पर इतनी सारी निर्भरताएं हैं कि यह परीक्षण करने के लिए कुछ काम करने जा रहा है।

+0

क्या आपने जेबॉस के बाहर टोमकैट स्थापित करने और अपना वेबस्टार्ट ऐप वहां रखने की कोशिश की है? क्या होता है? क्या आप टॉमकैट को बंद करने के बाद अलग-अलग बार रिपोर्ट करते हैं? – chubbsondubs

उत्तर

3

WAR फ़ाइल के बजाय एक विस्फोटित वेब एप्लिकेशन के रूप में अपने एप्लिकेशन को तैनात करने का प्रयास करें।

इससे जेबॉस को एप्लिकेशन को डिकंप्रेस करना होगा और संभावित रूप से संशोधन तिथियों को गड़बड़ करना होगा।

आपको अपने ऐप के अपडेट को ऐसे तरीके से संभालना होगा जो संशोधन तिथियों को संरक्षित करता है, उदाहरण के लिए, rsync, लेकिन यह जेबॉस डाउनग्रेडिंग या पैचिंग से आसान हो सकता है।

+0

वाह, मुझे यकीन नहीं है कि जेबॉस मेरे विस्फोटित कान और युद्ध के साथ क्या कर रहा है, लेकिन कुछ भी कहने में तीन मिनट लग गए, फिर जब यह परमजन स्पेस से बाहर हो गया तो अपवाद फेंक दिया! – skiphoppy

+0

जेबॉस के कुछ संस्करणों के लिए, विस्फोटित निर्देशिका नाम को '.war' या '.ear' के साथ उचित रूप से समाप्त करना होगा। क्या तुम कर रहे हो – blahdiblah

+0

नहीं, मैं कुछ और बेवकूफ गलती कर रहा था जिसे मैंने आज सुबह सही किया - और यह इस काम को बदल देता है! एक सरल और संक्षिप्त कामकाज के लिए धन्यवाद! :) – skiphoppy

2

ऐसा लगता है कि VFSUtils फ़ाइल की lastModifiedDate को बनाए रखता है जब यह सर्वर स्टार्टअप पर tmp निर्देशिका में फाइल सिस्टम को माउंट करता है। भौतिक फ़ाइल के मानों के आधार पर नई फ़ाइल के टाइमस्टैम्प को सेट करने का प्रयास करने के लिए आप उस वर्ग में कॉपी विधियों को पैच कर सकते हैं।

चबर्ड द्वारा टिप्पणी के जवाब के रूप में: समस्या टॉमकैट (टॉमकैट 7.0.21 सटीक होने के साथ नहीं होती है) के साथ नहीं होती है।

0

एक समस्या है (https://issues.jboss.org/browse/JBVFS-177) VFSUtils.unzip() के बारे में बनाया गया है जो तैनाती करते समय टाइमस्टैम्प को संरक्षित नहीं करता है (अभी भी जेबॉस 6.1 पर लागू होता है)।

चूंकि समस्या अनजिप विधि से संबंधित है, इसलिए blahdiblah का समाधान वास्तव में काम कर सकता है।

एक और तरीका जावा वेब स्टार्ट का उपयोग संस्करण के आधार पर करना होगा (संस्करण के साथ जेएनएलपी का संशोधन और संस्करण.एक्सएमएल का निर्माण)।

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