2012-12-17 19 views
5

मेरे पास एक grails एप्लिकेशन है जो मैं grails इंटरैक्टिव मोड के माध्यम से चल रहा है। इस एप्लिकेशन में सेवाएं, टैगलिब्स, जीएसपीएस आदि शामिल हैं लेकिन सबसे महत्वपूर्ण बात यह है कि इसमें src/groovy फ़ोल्डर में groovy फ़ाइलें शामिल हैं।Grails इंटरैक्टिव मोड में स्टेटिक स्ट्रिंग्स

इन ग्रूवी फ़ाइलों में से एक AppConstants.groovy कहा जाता है और शामिल हैं यानी

public static final String VARIABLE1 = "VARIABLE VALUE" 

स्थैतिक चर की एक भीड़ जब गैर इंटरैक्टिव मोड मैं कोई समस्या नहीं मिल में इस चल रहा है, अपडेट इस चर करने के लिए किया जाता है चलने वाले ऐप में प्रतिबिंबित होने पर प्रतिबिंबित होता है। इंटरैक्टिव मोड में हालांकि, VARIABLE1 वैरिएबल में किए गए कोई भी परिवर्तन ऐप में प्रतिबिंबित नहीं होते हैं, भले ही आप exit और run-app पर कॉल करें। परिवर्तनों को प्रतिबिंबित करने के लिए इंटरैक्टिव मोड को बाहर निकाला जाना चाहिए और पुनरारंभ करना चाहिए।

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

कोई विचार क्या है इसके पीछे कारण क्या है? कक्षा को संकलित किया जा रहा है क्योंकि मैं इसे इंटरैक्टिव कंसोल में देख सकता हूं ताकि कोई भी एप्लिकेशन में किसी भी बदलाव को प्रतिबिंबित करने की अपेक्षा करे, जरूरी नहीं कि यह चल रहा हो, लेकिन कम से कम exit के साथ run-app के साथ।

अतिरिक्त जानकारी: Grails संस्करण 2.1.0

+0

हो सकता है कि इंटरैक्टिव मोड यह देखने में असफल रहा कि फ़ाइल बदल गई है? यदि आप बस रन-एप करते हैं, तो "1 स्रोत फ़ाइल संकलित" संदेश दिखाई देता है? –

+0

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

उत्तर

1

एक छोटे से परीक्षण किया और यहाँ मैं क्या पाया है:

  1. प्रक्रिया शुरू बिना -reloading की अनुमति कभी नहीं चर अद्यतन करने की - तो grails -reloading या grails -reloading run-app

  2. गैर final चर प्रोसेस शुरू करते समय सही ढंग से पुनः लोड करें ऊपर के रूप में है। तो public static String VARIABLE1 = "VARIABLE VALUE" फिर से लोड करता है और दिखाता है जब मैं मान

  3. final चर अद्यतन नहीं करेगा। तो public static final String VARIABLE1 = "VARIABLE VALUE" पुनः लोड नहीं होगा और नया मान दिखाएगा।

मैंने कई चर भी बनाए, कुछ final और कुछ नहीं। जब तक मैंने -reloading का उपयोग किया, तब तक गैर-final चर पुनः लोड हो जाएंगे लेकिन final नहीं होगा। जब अपडेट और सहेज लिया VARIABLE2 परिवर्तन -

public static final String VARIABLE1 = "VARIABLE VALUE" 
public static String VARIABLE2 = "NON FINAL VARIABLE VALUE" 

इस परिदृश्य VARIABLE1 में पुनः आरंभ जब तक परिवर्तन नहीं होगा।

+0

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